ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCBkZWI2YjQ4Li5hMDdjMGYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC0yMSwyNSArMjEsMjcgQEAKIERlc2NyaXB0aW9uOgogCQlFYWNoIFVTQiBkZXZpY2UgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpbGUgbmFtZWQKIAkJcG93ZXIvbGV2ZWwuICBUaGlzIGZpbGUgaG9sZHMgYSBwb3dlci1sZXZlbCBzZXR0aW5nIGZvcgotCQl0aGUgZGV2aWNlLCBvbmUgb2YgIm9uIiwgImF1dG8iLCBvciAic3VzcGVuZCIuCisJCXRoZSBkZXZpY2UsIGVpdGhlciAib24iIG9yICJhdXRvIi4KIAogCQkib24iIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYWxsb3dlZCB0byBhdXRvc3VzcGVuZCwKIAkJYWx0aG91Z2ggbm9ybWFsIHN1c3BlbmRzIGZvciBzeXN0ZW0gc2xlZXAgd2lsbCBzdGlsbAogCQliZSBob25vcmVkLiAgImF1dG8iIG1lYW5zIHRoZSBkZXZpY2Ugd2lsbCBhdXRvc3VzcGVuZAogCQlhbmQgYXV0b3Jlc3VtZSBpbiB0aGUgdXN1YWwgbWFubmVyLCBhY2NvcmRpbmcgdG8gdGhlCi0JCWNhcGFiaWxpdGllcyBvZiBpdHMgZHJpdmVyLiAgInN1c3BlbmQiIG1lYW5zIHRoZSBkZXZpY2UKLQkJaXMgZm9yY2VkIGludG8gYSBzdXNwZW5kZWQgc3RhdGUgYW5kIGl0IHdpbGwgbm90IGF1dG9yZXN1bWUKLQkJaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLiAgSG93ZXZlciByZW1vdGUtd2FrZXVwIHJlcXVlc3RzCi0JCWZyb20gdGhlIGRldmljZSBtYXkgc3RpbGwgYmUgZW5hYmxlZCAodGhlIHJlbW90ZS13YWtldXAKLQkJc2V0dGluZyBpcyBjb250cm9sbGVkIHNlcGFyYXRlbHkgYnkgdGhlIHBvd2VyL3dha2V1cAotCQlhdHRyaWJ1dGUpLgorCQljYXBhYmlsaXRpZXMgb2YgaXRzIGRyaXZlci4KIAogCQlEdXJpbmcgbm9ybWFsIHVzZSwgZGV2aWNlcyBzaG91bGQgYmUgbGVmdCBpbiB0aGUgImF1dG8iCi0JCWxldmVsLiAgVGhlIG90aGVyIGxldmVscyBhcmUgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCisJCWxldmVsLiAgVGhlICJvbiIgbGV2ZWwgaXMgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCiAJCUlmIHlvdSB3YW50IHRvIHN1c3BlbmQgYSBkZXZpY2UgaW1tZWRpYXRlbHkgYnV0IGxlYXZlIGl0CiAJCWZyZWUgdG8gd2FrZSB1cCBpbiByZXNwb25zZSB0byBJL08gcmVxdWVzdHMsIHlvdSBzaG91bGQKIAkJd3JpdGUgIjAiIHRvIHBvd2VyL2F1dG9zdXNwZW5kLgogCisJCURldmljZSBub3QgY2FwYWJsZSBvZiBwcm9wZXIgc3VzcGVuZCBhbmQgcmVzdW1lIHNob3VsZCBiZQorCQlsZWZ0IGluIHRoZSAib24iIGxldmVsLiAgQWx0aG91Z2ggdGhlIFVTQiBzcGVjIHJlcXVpcmVzCisJCWRldmljZXMgdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZSwgbWFueSBvZiB0aGVtIGRvIG5vdC4KKwkJSW4gZmFjdCBzbyBtYW55IGRvbid0IHRoYXQgYnkgZGVmYXVsdCwgdGhlIFVTQiBjb3JlCisJCWluaXRpYWxpemVzIGFsbCBub24taHViIGRldmljZXMgaW4gdGhlICJvbiIgbGV2ZWwuICBTb21lCisJCWRyaXZlcnMgbWF5IGNoYW5nZSB0aGlzIHNldHRpbmcgd2hlbiB0aGV5IGFyZSBib3VuZC4KKwogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLy4uLi9wb3dlci9wZXJzaXN0CiBEYXRlOgkJTWF5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKaW5kZXggNjAxMjBmYi4uZDJjZDZmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CkBAIC0yMjYsNSArMjI2LDUgQEAKIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gdGhlCiBkcml2ZXIncyBkaXJlY3RvcnkgdXNpbmc6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKaW5kZXggYjI0NWQ1Mi4uOTMxYzgwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTkxLDggKzkxLDggQEAKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7Ci12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKIAogSXQgYWxzbyBkZWZpbmVzIHRoaXMgaGVscGVyIGZvciBkZWZpbmluZyBkZXZpY2UgYXR0cmlidXRlczogCiAKQEAgLTMxNiw4ICszMTYsOCBAQAogCiBDcmVhdGlvbi9SZW1vdmFsOgogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKIAogCiAtIGJ1cyBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQpAQCAtMzU4LDcgKzM1OCw3IEBACiAKIENyZWF0aW9uL1JlbW92YWw6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dAppbmRleCA0YTMxMDliLi4zNTZmZDg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKQEAgLTQyLDgwICs0Miw4MSBAQAogCS4uLgogfTsKIAotVGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIHRoZSBidXMgdHlwZSBvZgotdGhlIGRldmljZSBiZWluZyBzdXNwZW5kZWQuICBUaGUgYnVzIHR5cGUncyBjYWxsYmFjayBpcyB0aGVuIF9lbnRpcmVseV8KLV9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90Ci1pbmNsdWRlIGV4ZWN1dGluZyB0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfc3VzcGVuZCgpCi1jYWxsYmFjayBpbiBhIGRldmljZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGtub3dzCi13aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KK1RoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpLCAtPnJ1bnRpbWVfcmVzdW1lKCkgYW5kIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2tzIGFyZQorZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIGVpdGhlciB0aGUgYnVzIHR5cGUsIG9yIGRldmljZSB0eXBlIChpZiB0aGUgYnVzCit0eXBlJ3MgY2FsbGJhY2sgaXMgbm90IGRlZmluZWQpLCBvciBkZXZpY2UgY2xhc3MgKGlmIHRoZSBidXMgdHlwZSdzIGFuZCBkZXZpY2UKK3R5cGUncyBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkKSBvZiBnaXZlbiBkZXZpY2UuICBUaGUgYnVzIHR5cGUsIGRldmljZSB0eXBlCithbmQgZGV2aWNlIGNsYXNzIGNhbGxiYWNrcyBhcmUgcmVmZXJyZWQgdG8gYXMgc3Vic3lzdGVtLWxldmVsIGNhbGxiYWNrcyBpbiB3aGF0Citmb2xsb3dzLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CitUaGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgaXMgX2VudGlyZWx5XyBfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZwordGhlIHN1c3BlbmQgb2YgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QgaW5jbHVkZQorZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgKGZyb20gdGhlCitQTSBjb3JlJ3MgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9zdXNwZW5kKCkKK2NhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjawora25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCisKKyAgKiBPbmNlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogICAgIGZvciBnaXZlbiBkZXZpY2UsIHRoZSBQTSBjb3JlIHJlZ2FyZHMgdGhlIGRldmljZSBhcyBzdXNwZW5kZWQsIHdoaWNoIG5lZWQKICAgICBub3QgbWVhbiB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUuICBJdCBpcwogICAgIHN1cHBvc2VkIHRvIG1lYW4sIGhvd2V2ZXIsIHRoYXQgdGhlIGRldmljZSB3aWxsIG5vdCBwcm9jZXNzIGRhdGEgYW5kIHdpbGwKLSAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgaXRzIGJ1cyB0eXBlJ3MKLSAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZm9yIGl0LiAgVGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZgotICAgIGEgZGV2aWNlIGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIGl0cyBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkKLSAgICBjYWxsYmFjayBpcyAnc3VzcGVuZGVkJy4KKyAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUKKyAgICBjYWxsYmFjayBpcyBleGVjdXRlZCBmb3IgaXQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIGEgZGV2aWNlIGFmdGVyCisgICAgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIGlzICdzdXNwZW5kZWQnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAotICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgc3VwcG9zZWQgdG8gYmUgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQKLSAgICB0aGUgZGV2aWNlIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAorICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZQorICAgIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUKLSAgICBkaWZmZXJlbnQgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwKLSAgICBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQKLSAgICBmb3IgdGhlIGRldmljZSwgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnCi0gICAgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhpcwotICAgIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUgZGlmZmVyZW50CisgICAgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHdpbGwKKyAgICByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQgZm9yIHRoZSBkZXZpY2UsCisgICAgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnLCBvciB0byAnc3VzcGVuZGVkJworICAgICh0aGUgUE0gY29yZSBwcm92aWRlcyBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCiAKLUluIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBjYXBhYmlsaXR5IGZvciBwcm9wZXIKLWZ1bmN0aW9uaW5nIGFuZCBkZXZpY2VfcnVuX3dha2UoKSByZXR1cm5zICdmYWxzZScgZm9yIHRoZSBkZXZpY2UsIHRoZW4KLS0+cnVudGltZV9zdXNwZW5kKCkgc2hvdWxkIHJldHVybiAtRUJVU1kuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYKLWRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ3RydWUnIGZvciB0aGUgZGV2aWNlIGFuZCB0aGUgZGV2aWNlIGlzIHB1dAotaW50byBhIGxvdyBwb3dlciBzdGF0ZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgYnVzIHR5cGUncwotLT5ydW50aW1lX3N1c3BlbmQoKSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgd2FrZS11cCAoaS5lLiBoYXJkd2FyZSBtZWNoYW5pc20KLWFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMgUENJIFBNRSkKLXdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIGRldmljZS4gIEdlbmVyYWxseSwgcmVtb3RlIHdha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQKLWZvciBhbGwgaW5wdXQgZGV2aWNlcyBwdXQgaW50byBhIGxvdyBwb3dlciBzdGF0ZSBhdCBydW4gdGltZS4KK0luIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2UtdXAgY2FwYWJpbGl0eSAoaS5lLiBoYXJkd2FyZQorbWVjaGFuaXNtIGFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMKK1BDSSBQTUUpIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgYW5kIGRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ2ZhbHNlJyBmb3IgdGhlCitkZXZpY2UsIHRoZW4gLT5ydW50aW1lX3N1c3BlbmQoKSBzaG91bGQgcmV0dXJuIC1FQlVTWS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgorZGV2aWNlX3J1bl93YWtlKCkgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaXMgcHV0IGludG8gYSBsb3cKK3Bvd2VyIHN0YXRlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjaywgaXQgaXMKK2V4cGVjdGVkIHRoYXQgcmVtb3RlIHdha2UtdXAgd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgZGV2aWNlLiAgR2VuZXJhbGx5LCByZW1vdGUKK3dha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGFsbCBpbnB1dCBkZXZpY2VzIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlIGF0CitydW4gdGltZS4KIAotVGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi10aGUgZGV2aWNlIGJlaW5nIHdva2VuIHVwLiAgVGhlIGJ1cyB0eXBlJ3MgY2FsbGJhY2sgaXMgdGhlbiBfZW50aXJlbHlfCi1fcmVzcG9uc2libGVfIGZvciBoYW5kbGluZyB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdAotaW5jbHVkZSBleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfcmVzdW1lKCkKLWNhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBrbm93cwotd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCitUaGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBpcyBfZW50aXJlbHlfIF9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZQorcmVzdW1lIG9mIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90IGluY2x1ZGUgZXhlY3V0aW5nCit0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgKGZyb20gdGhlIFBNIGNvcmUncyBwb2ludCBvZgordmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpbiBhIGRldmljZQorZHJpdmVyIGFzIGxvbmcgYXMgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sga25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUKK3RoZSBkZXZpY2UpLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCi0gICAgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZQotICAgIGRldmljZSBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUKLSAgICBQTSBzdGF0dXMgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgorICAqIE9uY2UgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZSBQTQorICAgIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkZXZpY2UKKyAgICBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzCisgICAgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNCi0gICAgY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIKLSAgICBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcwotICAgIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzCi0gICAgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNIGNvcmUKKyAgICByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zCisgICAgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcyBkaXJlY3RseSBzZXQKKyAgICBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyCisgICAgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgogCi1UaGUgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi1naXZlbiBkZXZpY2Ugd2hlbmV2ZXIgdGhlIGRldmljZSBhcHBlYXJzIHRvIGJlIGlkbGUsIHdoaWNoIGlzIGluZGljYXRlZCB0byB0aGUKLVBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgdGhlIGNvdW50ZXIgb2YgJ2FjdGl2ZScKLWNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCitUaGUgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgd2hlbmV2ZXIgdGhlIGRldmljZQorYXBwZWFycyB0byBiZSBpZGxlLCB3aGljaCBpcyBpbmRpY2F0ZWQgdG8gdGhlIFBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUKK2RldmljZSdzIHVzYWdlIGNvdW50ZXIgYW5kIHRoZSBjb3VudGVyIG9mICdhY3RpdmUnIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCiAKICAgKiBJZiBhbnkgb2YgdGhlc2UgY291bnRlcnMgaXMgZGVjcmVhc2VkIHVzaW5nIGEgaGVscGVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5CiAgICAgdGhlIFBNIGNvcmUgYW5kIGl0IHR1cm5zIG91dCB0byBiZSBlcXVhbCB0byB6ZXJvLCB0aGUgb3RoZXIgY291bnRlciBpcwogICAgIGNoZWNrZWQuICBJZiB0aGF0IGNvdW50ZXIgYWxzbyBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgUE0gY29yZSBleGVjdXRlcyB0aGUKLSAgICBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrICh3aXRoIHRoZSBkZXZpY2UgYXMgYW4KLSAgICBhcmd1bWVudCkuCisgICAgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgd2l0aCB0aGUgZGV2aWNlIGFzIGFuIGFyZ3VtZW50LgogCi1UaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyB0b3RhbGx5Ci1kZXBlbmRlbnQgb24gdGhlIGJ1cyB0eXBlIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24KLWlzIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMKLW5lY2Vzc2FyeSBmb3Igc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQKLXJlcXVlc3QgZm9yIHRoZSBkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMKLWlnbm9yZWQgYnkgdGhlIFBNIGNvcmUuCitUaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGlzIHRvdGFsbHkgZGVwZW5kZW50IG9uCit0aGUgc3Vic3lzdGVtIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24gaXMgdG8gY2hlY2sKK2lmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvcgorc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQgcmVxdWVzdCBmb3IgdGhlCitkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMgaWdub3JlZCBieSB0aGUgUE0KK2NvcmUuCiAKIFRoZSBoZWxwZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBQTSBjb3JlLCBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LCBndWFyYW50ZWUKIHRoYXQgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBhcmUgbWV0IHdpdGggcmVzcGVjdCB0byB0aGUgYnVzIHR5cGUncyBydW4tdGltZQpAQCAtMjM4LDQxICsyMzksNDEgQEAKICAgICAgIHJlbW92aW5nIHRoZSBkZXZpY2UgZnJvbSBkZXZpY2UgaGllcmFyY2h5CiAKICAgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfaWRsZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbiBzdWNjZXNzCi0gICAgICBvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FSU5QUk9HUkVTUyBtZWFucyB0aGF0IC0+cnVudGltZV9pZGxlKCkKLSAgICAgIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQKKyAgICAtIGV4ZWN1dGUgdGhlIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUlOUFJPR1JFU1MgbWVhbnMgdGhhdAorICAgICAgLT5ydW50aW1lX2lkbGUoKSBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkCiAKICAgaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgogICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdzdXNwZW5kZWQnLCBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG9yIC1FQlVTWSBtZWFucyBpdCBpcyBzYWZlIHRvIGF0dGVtcHQKICAgICAgIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhZ2FpbiBpbiBmdXR1cmUKIAogICBpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKLSAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmUgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KICAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJyBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG1lYW5zIGl0IG1heSBiZSBzYWZlIHRvIGF0dGVtcHQgdG8KICAgICAgIHJlc3VtZSB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZSwgYnV0ICdwb3dlci5ydW50aW1lX2Vycm9yJyBzaG91bGQgYmUKICAgICAgIGNoZWNrZWQgYWRkaXRpb25hbGx5CiAKICAgaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZQotICAgICAgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLSAgICAgIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAorICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCisgICAgICBzdWNjZXNzIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAogCiAgIGludCBwbV9zY2hlZHVsZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KTsKLSAgICAtIHNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICBpbiBmdXR1cmUsIHdoZXJlICdkZWxheScgaXMgdGhlIHRpbWUgdG8gd2FpdCBiZWZvcmUgcXVldWluZyB1cCBhIHN1c3BlbmQKLSAgICAgIHdvcmsgaXRlbSBpbiBwbV93cSwgaW4gbWlsbGlzZWNvbmRzIChpZiAnZGVsYXknIGlzIHplcm8sIHRoZSB3b3JrIGl0ZW0gaXMKLSAgICAgIHF1ZXVlZCB1cCBpbW1lZGlhdGVseSk7IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBQTQorICAgIC0gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZQorICAgICAgZGV2aWNlIGluIGZ1dHVyZSwgd2hlcmUgJ2RlbGF5JyBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBxdWV1aW5nIHVwIGEKKyAgICAgIHN1c3BlbmQgd29yayBpdGVtIGluIHBtX3dxLCBpbiBtaWxsaXNlY29uZHMgKGlmICdkZWxheScgaXMgemVybywgdGhlIHdvcmsKKyAgICAgIGl0ZW0gaXMgcXVldWVkIHVwIGltbWVkaWF0ZWx5KTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIFBNCiAgICAgICBydW4tdGltZSBzdGF0dXMgd2FzIGFscmVhZHkgJ3N1c3BlbmRlZCcsIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QKICAgICAgIGhhc24ndCBiZWVuIHNjaGVkdWxlZCAob3IgcXVldWVkIHVwIGlmICdkZWxheScgaXMgMCk7IGlmIHRoZSBleGVjdXRpb24gb2YKICAgICAgIC0+cnVudGltZV9zdXNwZW5kKCkgaXMgYWxyZWFkeSBzY2hlZHVsZWQgYW5kIG5vdCB5ZXQgZXhwaXJlZCwgdGhlIG5ldwogICAgICAgdmFsdWUgb2YgJ2RlbGF5JyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRpbWUgdG8gd2FpdAogCiAgIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KKyAgICAtIHN1Ym1pdCBhIHJlcXVlc3QgdG8gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCiAgICAgICBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgd2FzIGFscmVhZHkgJ2FjdGl2ZScsIG9yCiAgICAgICBlcnJvciBjb2RlIGlmIHRoZSByZXF1ZXN0IGhhc24ndCBiZWVuIHF1ZXVlZCB1cAogCkBAIC0zMDMsMTIgKzMwNCwxMiBAQAogICAgICAgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDIKIAogICBpbnQgcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyB0aGUgZGV2aWNlIGJ1cwotICAgICAgdHlwZSdzIHJ1bi10aW1lIFBNIGNhbGxiYWNrcywgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nIHJ1bi10aW1lCi0gICAgICBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7IHJldHVybnMKLSAgICAgIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0byBleGVjdXRlCi0gICAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZSB0byBzYXRpc2Z5IHRoYXQgcmVxdWVzdCwKLSAgICAgIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCisgICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyBzdWJzeXN0ZW0tbGV2ZWwKKyAgICAgIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBmb3IgdGhlIGRldmljZSwgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nCisgICAgICBydW4tdGltZSBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7CisgICAgICByZXR1cm5zIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0bworICAgICAgZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlIGRldmljZSB0byBzYXRpc2Z5IHRoYXQKKyAgICAgIHJlcXVlc3QsIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCiAKICAgdm9pZCBwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKICAgICAtIHNldC91bnNldCB0aGUgcG93ZXIuaWdub3JlX2NoaWxkcmVuIGZsYWcgb2YgdGhlIGRldmljZQpAQCAtMzc4LDUgKzM3OSw1NSBAQAogdGhleSB3aWxsIGZhaWwgcmV0dXJuaW5nIC1FQUdBSU4sIGJlY2F1c2UgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgaXMKIGluY3JlbWVudGVkIGJ5IHRoZSBjb3JlIGJlZm9yZSBleGVjdXRpbmcgLT5wcm9iZSgpIGFuZCAtPnJlbW92ZSgpLiAgU3RpbGwsIGl0CiBtYXkgYmUgZGVzaXJhYmxlIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhcyBzb29uIGFzIC0+cHJvYmUoKSBvciAtPnJlbW92ZSgpIGhhcwotZmluaXNoZWQsIHNvIHRoZSBQTSBjb3JlIHVzZXMgcG1fcnVudGltZV9pZGxlX3N5bmMoKSB0byBpbnZva2UgdGhlIGRldmljZSBidXMKLXR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGF0IHRoYXQgdGltZS4KK2ZpbmlzaGVkLCBzbyB0aGUgUE0gY29yZSB1c2VzIHBtX3J1bnRpbWVfaWRsZV9zeW5jKCkgdG8gaW52b2tlIHRoZQorc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2UgYXQgdGhhdCB0aW1lLgorCis2LiBSdW4tdGltZSBQTSBhbmQgU3lzdGVtIFNsZWVwCisKK1J1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAgKGkuZS4sIHN5c3RlbSBzdXNwZW5kIGFuZCBoaWJlcm5hdGlvbiwgYWxzbyBrbm93bgorYXMgc3VzcGVuZC10by1SQU0gYW5kIHN1c3BlbmQtdG8tZGlzaykgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGluIGEgY291cGxlIG9mCit3YXlzLiAgSWYgYSBkZXZpY2UgaXMgYWN0aXZlIHdoZW4gYSBzeXN0ZW0gc2xlZXAgc3RhcnRzLCBldmVyeXRoaW5nIGlzCitzdHJhaWdodGZvcndhcmQuICBCdXQgd2hhdCBzaG91bGQgaGFwcGVuIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzdXNwZW5kZWQ/CisKK1RoZSBkZXZpY2UgbWF5IGhhdmUgZGlmZmVyZW50IHdha2UtdXAgc2V0dGluZ3MgZm9yIHJ1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAuCitGb3IgZXhhbXBsZSwgcmVtb3RlIHdha2UtdXAgbWF5IGJlIGVuYWJsZWQgZm9yIHJ1bi10aW1lIHN1c3BlbmQgYnV0IGRpc2FsbG93ZWQKK2ZvciBzeXN0ZW0gc2xlZXAgKGRldmljZV9tYXlfd2FrZXVwKGRldikgcmV0dXJucyAnZmFsc2UnKS4gIFdoZW4gdGhpcyBoYXBwZW5zLAordGhlIHN1YnN5c3RlbS1sZXZlbCBzeXN0ZW0gc3VzcGVuZCBjYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IgY2hhbmdpbmcgdGhlCitkZXZpY2UncyB3YWtlLXVwIHNldHRpbmcgKGl0IG1heSBsZWF2ZSB0aGF0IHRvIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgc3lzdGVtCitzdXNwZW5kIHJvdXRpbmUpLiAgSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZXN1bWUgdGhlIGRldmljZSBhbmQgc3VzcGVuZCBpdCBhZ2FpbgoraW4gb3JkZXIgdG8gZG8gc28uICBUaGUgc2FtZSBpcyB0cnVlIGlmIHRoZSBkcml2ZXIgdXNlcyBkaWZmZXJlbnQgcG93ZXIgbGV2ZWxzCitvciBvdGhlciBzZXR0aW5ncyBmb3IgcnVuLXRpbWUgc3VzcGVuZCBhbmQgc3lzdGVtIHNsZWVwLgorCitEdXJpbmcgc3lzdGVtIHJlc3VtZSwgZGV2aWNlcyBnZW5lcmFsbHkgc2hvdWxkIGJlIGJyb3VnaHQgYmFjayB0byBmdWxsIHBvd2VyLAorZXZlbiBpZiB0aGV5IHdlcmUgc3VzcGVuZGVkIGJlZm9yZSB0aGUgc3lzdGVtIHNsZWVwIGJlZ2FuLiAgVGhlcmUgYXJlIHNldmVyYWwKK3JlYXNvbnMgZm9yIHRoaXMsIGluY2x1ZGluZzoKKworICAqIFRoZSBkZXZpY2UgbWlnaHQgbmVlZCB0byBzd2l0Y2ggcG93ZXIgbGV2ZWxzLCB3YWtlLXVwIHNldHRpbmdzLCBldGMuCisKKyAgKiBSZW1vdGUgd2FrZS11cCBldmVudHMgbWlnaHQgaGF2ZSBiZWVuIGxvc3QgYnkgdGhlIGZpcm13YXJlLgorCisgICogVGhlIGRldmljZSdzIGNoaWxkcmVuIG1heSBuZWVkIHRoZSBkZXZpY2UgdG8gYmUgYXQgZnVsbCBwb3dlciBpbiBvcmRlcgorICAgIHRvIHJlc3VtZSB0aGVtc2VsdmVzLgorCisgICogVGhlIGRyaXZlcidzIGlkZWEgb2YgdGhlIGRldmljZSBzdGF0ZSBtYXkgbm90IGFncmVlIHdpdGggdGhlIGRldmljZSdzCisgICAgcGh5c2ljYWwgc3RhdGUuICBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uLgorCisgICogVGhlIGRldmljZSBtaWdodCBuZWVkIHRvIGJlIHJlc2V0LgorCisgICogRXZlbiB0aG91Z2ggdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkLCBpZiBpdHMgdXNhZ2UgY291bnRlciB3YXMgPiAwIHRoZW4gbW9zdAorICAgIGxpa2VseSBpdCB3b3VsZCBuZWVkIGEgcnVuLXRpbWUgcmVzdW1lIGluIHRoZSBuZWFyIGZ1dHVyZSBhbnl3YXkuCisKKyAgKiBBbHdheXMgZ29pbmcgYmFjayB0byBmdWxsIHBvd2VyIGlzIHNpbXBsZXN0LgorCitJZiB0aGUgZGV2aWNlIHdhcyBzdXNwZW5kZWQgYmVmb3JlIHRoZSBzbGVlcCBiZWdhbiwgdGhlbiBpdHMgcnVuLXRpbWUgUE0gc3RhdHVzCit3aWxsIGhhdmUgdG8gYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhY3R1YWwgcG9zdC1zeXN0ZW0gc2xlZXAgc3RhdHVzLiAgVGhlIHdheQordG8gZG8gdGhpcyBpczoKKworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKK1RoZSBQTSBjb3JlIGFsd2F5cyBpbmNyZW1lbnRzIHRoZSBydW4tdGltZSB1c2FnZSBjb3VudGVyIGJlZm9yZSBjYWxsaW5nIHRoZQorLT5wcmVwYXJlKCkgY2FsbGJhY2sgYW5kIGRlY3JlbWVudHMgaXQgYWZ0ZXIgY2FsbGluZyB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrLgorSGVuY2UgZGlzYWJsaW5nIHJ1bi10aW1lIFBNIHRlbXBvcmFyaWx5IGxpa2UgdGhpcyB3aWxsIG5vdCBjYXVzZSBhbnkgcnVuLXRpbWUKK3N1c3BlbmQgY2FsbGJhY2tzIHRvIGJlIGxvc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTM5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dApAQCAtMCwwICsxLDQyIEBACisqIE9wZW5QSUMgYW5kIGl0cyBpbnRlcnJ1cHQgbnVtYmVycyBvbiBGcmVlc2NhbGUncyBlNTAwL2U2MDAgY29yZXMKKworVGhlIE9wZW5QSUMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIGludGVycnVwdCBzb3VyY2UgaGFzIHRvCitiZWNvbWUgd2hpY2ggaW50ZXJydXB0IG51bWJlci4gVGhpcyBpcyB1cCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCBldmVyeQoraW50ZXJydXB0IHNvdXJjZSBoYXMgdG8gaGF2ZSBhbiB1bmlxdWUgaW50ZXJydXB0IG51bWJlciAvIHZlY3RvciBudW1iZXIuCitUbyBhY2NvbXBsaXNoIHRoaXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXNzaWducyB0aGUgbnVtYmVyIHplcm8gdG8KK3RoZSBmaXJzdCBzb3VyY2UsIHRoZSBudW1iZXIgb25lIHRvIHRoZSBzZWNvbmQgc291cmNlIGFuZCBzbyBvbiB1bnRpbAorYWxsIGludGVycnVwdCBzb3VyY2VzIGhhdmUgdGhlaXIgdW5pcXVlIG51bWJlci4KK1VzdWFsbHkgdGhlIGFzc2lnbmVkIHZlY3RvciBudW1iZXIgZXF1YWxzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG1lbnRpb25lZAoraW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGEgZ2l2ZW4gY29yZSAvIENQVS4gVGhpcyBpcyBob3dldmVyIG5vdCB0cnVlCitmb3IgdGhlIGU1MDAgY29yZXMgKE1QQzg1WFggQ1BVcykgd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gZGlzdGluZ3Vpc2hlcworYmV0d2VlbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYW5kIHN0YXJ0cyBjb3VudGluZyBhdAoremVybyBmb3IgYm90aCBvZiB0aGVtLgorCitTbyB3aGF0IHRvIHdyaXRlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlIFggb3IgaW50ZXJuYWwgaW50ZXJydXB0Citzb3VyY2UgWSBpbnRvIHRoZSBkZXZpY2UgdHJlZT8gSGVyZSBpcyBhbiBleGFtcGxlOgorCitUaGUgbWVtb3J5IG1hcCBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSBNUEM4NTQ0WzBdIHNob3dzLAordGhhdCB0aGUgZmlyc3QgaW50ZXJydXB0IHNvdXJjZSBzdGFydHMgYXQgMHg1XzAwMDAgKFBJQyBSZWdpc3RlciBBZGRyZXNzCitNYXAtSW50ZXJydXB0IFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycykuIFRoaXMgc291cmNlIGJlY29tZXMgdGhlCitudW1iZXIgemVybyB0aGVyZWZvcmU6CisgRXh0ZXJuYWwgaW50ZXJydXB0IDAgPSBpbnRlcnJ1cHQgbnVtYmVyIDAKKyBFeHRlcm5hbCBpbnRlcnJ1cHQgMSA9IGludGVycnVwdCBudW1iZXIgMQorIEV4dGVybmFsIGludGVycnVwdCAyID0gaW50ZXJydXB0IG51bWJlciAyCisgLi4uCitFdmVyeSBpbnRlcnJ1cHQgbnVtYmVyIGFsbG9jYXRlcyAweDIwIGJ5dGVzIHJlZ2lzdGVyIHNwYWNlLiBTbyB0byBnZXQKK2l0cyBudW1iZXIgaXQgaXMgc3VmZmljaWVudCB0byBzaGlmdCB0aGUgbG93ZXIgMTZiaXRzIHRvIHJpZ2h0IGJ5IGZpdmUuCitTbyBmb3IgdGhlIGV4dGVybmFsIGludGVycnVwdCAxMCB3ZSBoYXZlOgorICAweDAxNDAgPj4gNSA9IDEwCisKK0FmdGVyIHRoZSBleHRlcm5hbCBzb3VyY2VzLCB0aGUgaW50ZXJuYWwgc291cmNlcyBmb2xsb3cuIFRoZSBpbiBjb3JlIEkyQworY29udHJvbGxlciBvbiB0aGUgTVBDODU0NCBmb3IgaW5zdGFuY2UgaGFzIHRoZSBpbnRlcm5hbCBzb3VyY2UgbnVtYmVyCisyNy4gT28gb2J0YWluIGl0cyBpbnRlcnJ1cHQgbnVtYmVyIHdlIHRha2UgdGhlIGxvd2VyIDE2Yml0cyBvZiBpdHMgbWVtb3J5CithZGRyZXNzICgweDVfMDU2MCkgYW5kIHNoaWZ0IGl0IHJpZ2h0OgorIDB4MDU2MCA+PiA1ID0gNDMKKworVGhlcmVmb3JlIHRoZSBJMkMgZGV2aWNlIG5vZGUgZm9yIHRoZSBNUEM4NTQ0IENQVSBoYXMgdG8gaGF2ZSB0aGUKK2ludGVycnVwdCBudW1iZXIgNDMgc3BlY2lmaWVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKworWzBdIE1QQzg1NDRFIFBvd2VyUVVJQ0NUTSBJSUksIEludGVncmF0ZWQgSG9zdCBQcm9jZXNzb3IgRmFtaWx5IFJlZmVyZW5jZSBNYW51YWwKKyAgICBNUEM4NTQ0RVJNIFJldi4gMSAxMC8yMDA3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGU5M2FmZmYuLmU3MmNlZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC00MDMsNCArNDAzLDUgQEAKIENpcnJ1cyBMb2dpYyBDUzQyMDYvNDIwNwogPT09PT09PT09PT09PT09PT09PT09PT09CiAgIG1icDU1CQlNYWNCb29rIFBybyA1LDUKKyAgaW1hYzI3CUlNYWMgMjcgSW5jaAogICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKaW5kZXggYTQ1MjIyNy4uNWVmZmE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC0yNiwxMyArMjYsMzMgQEAKIAogIC0gU2VuZCB0aGUgcGF0Y2gsIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGZvbGxvd3MgdGhlIGFib3ZlIHJ1bGVzLCB0bwogICAgc3RhYmxlQGtlcm5lbC5vcmcuCisgLSBUbyBoYXZlIHRoZSBwYXRjaCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBzdGFibGUgdHJlZSwgYWRkIHRoZQorICAgdGhlIHRhZworICAgICBDYzogc3RhYmxlQGtlcm5lbC5vcmcKKyAgIGluIHRoZSBzaWduLW9mZiBhcmVhLiBPbmNlIHRoZSBwYXRjaCBpcyBtZXJnZWQgaXQgd2lsbCBiZSBhcHBsaWVkIHRvCisgICB0aGUgc3RhYmxlIHRyZWUgd2l0aG91dCBhbnl0aGluZyBlbHNlIG5lZWRpbmcgdG8gYmUgZG9uZSBieSB0aGUgYXV0aG9yCisgICBvciBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KKyAtIElmIHRoZSBwYXRjaCByZXF1aXJlcyBvdGhlciBwYXRjaGVzIGFzIHByZXJlcXVpc2l0ZXMgd2hpY2ggY2FuIGJlCisgICBjaGVycnktcGlja2VkIHRoYW4gdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGluCisgICB0aGUgc2lnbi1vZmYgYXJlYToKKworICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBhMWY4NGEzOiBzY2hlZDogQ2hlY2sgZm9yIGlkbGUKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogMWI5NTA4Zjogc2NoZWQ6IFJhdGUtbGltaXQgbmV3aWRsZQorICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBmZDIxMDczOiBzY2hlZDogRml4IGFmZmluaXR5IGxvZ2ljCisgICAgIENjOiA8c3RhYmxlQGtlcm5lbC5vcmc+ICMgLjMyLngKKyAgICBTaWduZWQtb2ZmLWJ5OiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKworICAgVGhlIHRhZyBzZXF1ZW5jZSBoYXMgdGhlIG1lYW5pbmcgb2Y6CisgICAgIGdpdCBjaGVycnktcGljayBhMWY4NGEzCisgICAgIGdpdCBjaGVycnktcGljayAxYjk1MDhmCisgICAgIGdpdCBjaGVycnktcGljayBmZDIxMDczCisgICAgIGdpdCBjaGVycnktcGljayA8dGhpcyBjb21taXQ+CisKICAtIFRoZSBzZW5kZXIgd2lsbCByZWNlaXZlIGFuIEFDSyB3aGVuIHRoZSBwYXRjaCBoYXMgYmVlbiBhY2NlcHRlZCBpbnRvIHRoZQogICAgcXVldWUsIG9yIGEgTkFLIGlmIHRoZSBwYXRjaCBpcyByZWplY3RlZC4gIFRoaXMgcmVzcG9uc2UgbWlnaHQgdGFrZSBhIGZldwogICAgZGF5cywgYWNjb3JkaW5nIHRvIHRoZSBkZXZlbG9wZXIncyBzY2hlZHVsZXMuCiAgLSBJZiBhY2NlcHRlZCwgdGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIC1zdGFibGUgcXVldWUsIGZvciByZXZpZXcgYnkKICAgIG90aGVyIGRldmVsb3BlcnMgYW5kIGJ5IHRoZSByZWxldmFudCBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KLSAtIElmIHRoZSBzdGFibGVAa2VybmVsLm9yZyBhZGRyZXNzIGlzIGFkZGVkIHRvIGEgcGF0Y2gsIHdoZW4gaXQgZ29lcyBpbnRvCi0gICBMaW51cydzIHRyZWUgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGVtYWlsZWQgdG8gdGhlIHN0YWJsZSB0ZWFtLgogIC0gU2VjdXJpdHkgcGF0Y2hlcyBzaG91bGQgbm90IGJlIHNlbnQgdG8gdGhpcyBhbGlhcywgYnV0IGluc3RlYWQgdG8gdGhlCiAgICBkb2N1bWVudGVkIHNlY3VyaXR5QGtlcm5lbC5vcmcgYWRkcmVzcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAppbmRleCA2ZWYyYTg2Li5hYTgyZWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dApAQCAtMSw3ICsxLDcgQEAKIAkJCVN1YnN5c3RlbSBUcmFjZSBQb2ludHM6IGttZW0KIAotVGhlIHRyYWNpbmcgc3lzdGVtIGttZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KLXdpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmb3VyIG1ham9yIHN1YmhlYWRpbmdzLgorVGhlIGttZW0gdHJhY2luZyBzeXN0ZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmaXZlIG1ham9yIHN1YmhlYWRpbmdzLgogCiAgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlIChrbWFsbG9jKQogICBvIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKQEAgLTksNyArOSw3IEBACiAgIG8gUGVyLUNQVSBBbGxvY2F0b3IgQWN0aXZpdHkKICAgbyBFeHRlcm5hbCBGcmFnbWVudGF0aW9uCiAKLVRoaXMgZG9jdW1lbnQgd2lsbCBkZXNjcmliZSB3aGF0IGVhY2ggb2YgdGhlIHRyYWNlcG9pbnRzIGFyZSBhbmQgd2h5IHRoZXkKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgaXMgYW5kIHdoeSB0aGV5CiBtaWdodCBiZSB1c2VmdWwuCiAKIDEuIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIHVua25vd24gdHlwZQpAQCAtMzQsNyArMzQsNyBAQAogVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIGluIHVzYWdlIHRvIHRoZSBrbWFsbG9jLXJlbGF0ZWQgZXZlbnRzIGV4Y2VwdCB0aGF0CiBpdCBpcyBsaWtlbHkgZWFzaWVyIHRvIHBpbiB0aGUgZXZlbnQgZG93biB0byBhIHNwZWNpZmljIGNhY2hlLiBBdCB0aGUgdGltZQogb2Ygd3JpdGluZywgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHdoYXQgc2xhYiBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSwKLWJ1dCB0aGUgY2FsbF9zaXRlIGNhbiB1c3VhbGx5IGJlIHVzZWQgdG8gZXh0cmFwb2xhdGUgdGhhdCBpbmZvcm1hdGlvbgorYnV0IHRoZSBjYWxsX3NpdGUgY2FuIHVzdWFsbHkgYmUgdXNlZCB0byBleHRyYXBvbGF0ZSB0aGF0IGluZm9ybWF0aW9uLgogCiAzLiBQYWdlIGFsbG9jYXRpb24KID09PT09PT09PT09PT09PT09PQpAQCAtODAsOSArODAsOSBAQAogV2hlbiB0aGUgcGVyLUNQVSBsaXN0IGlzIHRvbyBmdWxsLCBhIG51bWJlciBvZiBwYWdlcyBhcmUgZnJlZWQsIGVhY2ggb25lCiB3aGljaCB0cmlnZ2VycyBhIG1tX3BhZ2VfcGNwdV9kcmFpbiBldmVudC4KIAotVGhlIGluZGl2aWR1YWwgbmF0dXJlIG9mIHRoZSBldmVudHMgYXJlIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKK1RoZSBpbmRpdmlkdWFsIG5hdHVyZSBvZiB0aGUgZXZlbnRzIGlzIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gQSBudW1iZXIgb2YgZHJhaW4gb3IgcmVmaWxsIHBhZ2VzIHRoYXQgb2NjdXIKLWNvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBQQ1AKK2NvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBwZXItQ1BVCiByZWZpbGxzIGFuZCBkcmFpbnMgY291bGQgaW1wbHkgYW4gaW1iYWxhbmNlIGJldHdlZW4gQ1BVcyB3aGVyZSB0b28gbXVjaCB3b3JrCiBpcyBiZWluZyBjb25jZW50cmF0ZWQgaW4gb25lIHBsYWNlLiBJdCBjb3VsZCBhbHNvIGluZGljYXRlIHRoYXQgdGhlIHBlci1DUFUKIGxpc3RzIHNob3VsZCBiZSBhIGxhcmdlciBzaXplLiBGaW5hbGx5LCBsYXJnZSBhbW91bnRzIG9mIHJlZmlsbHMgb24gb25lIENQVQpAQCAtMTAyLDYgKzEwMiw2IEBACiAKIExhcmdlIG51bWJlcnMgb2YgdGhpcyBldmVudCBpbXBsaWVzIHRoYXQgbWVtb3J5IGlzIGZyYWdtZW50aW5nIGFuZAogaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB3aWxsIHN0YXJ0IGZhaWxpbmcgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuIE9uZQotbWVhbnMgb2YgcmVkdWNpbmcgdGhlIG9jY3VyYW5nZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCittZWFucyBvZiByZWR1Y2luZyB0aGUgb2NjdXJyZW5jZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCiBtaW5fZnJlZV9rYnl0ZXMgaW4gaW5jcmVtZW50cyBvZiAzKnBhZ2VibG9ja19zaXplKm5yX29ubGluZV9ub2RlcyB3aGVyZQogcGFnZWJsb2NrX3NpemUgaXMgdXN1YWxseSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBodWdlcGFnZSBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCBjN2MxZGMyLi4zYmY2ODE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtNzEsMTIgKzcxLDEwIEBACiAJRm9ybXMgb2YgZHluYW1pYyBQTQogCS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRHluYW1pYyBzdXNwZW5kcyBjYW4gb2NjdXIgaW4gdHdvIHdheXM6IG1hbnVhbCBhbmQgYXV0b21hdGljLgotIk1hbnVhbCIgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgdG9sZCB0aGUga2VybmVsIHRvIHN1c3BlbmQgYSBkZXZpY2UsCi13aGVyZWFzICJhdXRvbWF0aWMiIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMgZGVjaWRlZCBhbGwgYnkgaXRzZWxmIHRvCi1zdXNwZW5kIGEgZGV2aWNlLiAgQXV0b21hdGljIHN1c3BlbmQgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yCi1zaG9ydC4gIEluIGdlbmVyYWwsIGEgZGV2aWNlIHdvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuCi1pZGxlIGZvciBzb21lIG1pbmltdW0gcGVyaW9kIG9mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgorRHluYW1pYyBzdXNwZW5kcyBvY2N1ciB3aGVuIHRoZSBrZXJuZWwgZGVjaWRlcyB0byBzdXNwZW5kIGFuIGlkbGUKK2RldmljZS4gIFRoaXMgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yIHNob3J0LiAgSW4gZ2VuZXJhbCwgYSBkZXZpY2UKK3dvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuIGlkbGUgZm9yIHNvbWUgbWluaW11bSBwZXJpb2QKK29mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgogCiBPZiBjb3Vyc2UsIG5vdGhpbmcgdGhlIGtlcm5lbCBkb2VzIG9uIGl0cyBvd24gaW5pdGlhdGl2ZSBzaG91bGQKIHByZXZlbnQgdGhlIGNvbXB1dGVyIG9yIGl0cyBkZXZpY2VzIGZyb20gd29ya2luZyBwcm9wZXJseS4gIElmIGEKQEAgLTk2LDEwICs5NCwxMSBAQAogV2UgY2FuIGNhdGVnb3JpemUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgaW4gdHdvIGJyb2FkIGNsYXNzZXM6CiBleHRlcm5hbCBhbmQgaW50ZXJuYWwuICBFeHRlcm5hbCBldmVudHMgYXJlIHRob3NlIHRyaWdnZXJlZCBieSBzb21lCiBhZ2VudCBvdXRzaWRlIHRoZSBVU0Igc3RhY2s6IHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSAodHJpZ2dlcmVkIGJ5Ci11c2Vyc3BhY2UpLCBtYW51YWwgZHluYW1pYyBzdXNwZW5kL3Jlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkKLXVzZXJzcGFjZSksIGFuZCByZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbAotZXZlbnRzIGFyZSB0aG9zZSB0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZAotYXV0b3Jlc3VtZS4KK3VzZXJzcGFjZSksIG1hbnVhbCBkeW5hbWljIHJlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlKSwgYW5kCityZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbCBldmVudHMgYXJlIHRob3NlCit0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZCBhdXRvcmVzdW1lLiAgTm90ZSB0aGF0CithbGwgZHluYW1pYyBzdXNwZW5kIGV2ZW50cyBhcmUgaW50ZXJuYWw7IGV4dGVybmFsIGFnZW50cyBhcmUgbm90CithbGxvd2VkIHRvIGlzc3VlIGR5bmFtaWMgc3VzcGVuZHMuCiAKIAogCVRoZSB1c2VyIGludGVyZmFjZSBmb3IgZHluYW1pYyBQTQpAQCAtMTQ1LDkgKzE0NCw5IEBACiAJCW51bWJlciBvZiBzZWNvbmRzIHRoZSBkZXZpY2Ugc2hvdWxkIHJlbWFpbiBpZGxlIGJlZm9yZQogCQl0aGUga2VybmVsIHdpbGwgYXV0b3N1c3BlbmQgaXQgKHRoZSBpZGxlLWRlbGF5IHRpbWUpLgogCQlUaGUgZGVmYXVsdCBpcyAyLiAgMCBtZWFucyB0byBhdXRvc3VzcGVuZCBhcyBzb29uIGFzCi0JCXRoZSBkZXZpY2UgYmVjb21lcyBpZGxlLCBhbmQgLTEgbWVhbnMgbmV2ZXIgdG8KLQkJYXV0b3N1c3BlbmQuICBZb3UgY2FuIHdyaXRlIGEgbnVtYmVyIHRvIHRoZSBmaWxlIHRvCi0JCWNoYW5nZSB0aGUgYXV0b3N1c3BlbmQgaWRsZS1kZWxheSB0aW1lLgorCQl0aGUgZGV2aWNlIGJlY29tZXMgaWRsZSwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtZWFuCisJCW5ldmVyIHRvIGF1dG9zdXNwZW5kLiAgWW91IGNhbiB3cml0ZSBhIG51bWJlciB0byB0aGUKKwkJZmlsZSB0byBjaGFuZ2UgdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkgdGltZS4KIAogV3JpdGluZyAiLTEiIHRvIHBvd2VyL2F1dG9zdXNwZW5kIGFuZCB3cml0aW5nICJvbiIgdG8gcG93ZXIvbGV2ZWwgZG8KIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIC0tIHRoZXkgYm90aCBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZwpAQCAtMzc3LDkgKzM3Niw5IEBACiByb3V0aW5lIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwIHRvIGNhcnJ5IG91dCB0aGUgb3BlcmF0aW9uIHdoZW4gdGhlCiBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IGhhcyBleHBpcmVkLgogCi1BdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwuICBUaGlzIHdpbGwgaGFwcGVuIGlmIHBvd2VyL2xldmVsIGlzCi1zZXQgdG8gInN1c3BlbmQiIG9yIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBtYW5hZ2UgdG8gcmVzdW1lIHByb3Blcmx5LgotVW5saWtlIGF1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgorQXV0b3Jlc3VtZSBhdHRlbXB0cyBhbHNvIGNhbiBmYWlsLCBhbHRob3VnaCBmYWlsdXJlIHdvdWxkIG1lYW4gdGhhdAordGhlIGRldmljZSBpcyBubyBsb25nZXIgcHJlc2VudCBvciBvcGVyYXRpbmcgcHJvcGVybHkuICBVbmxpa2UKK2F1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgogCiAKIAlPdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIGludGVyZmFjZQpAQCAtNTI3LDEzICs1MjYsMyBAQAogcmVzdW1lIGFzIHNvb24gYXMgdGhlIHN5c3RlbSBzdXNwZW5kIGlzIGNvbXBsZXRlLiAgT3IgdGhlIHJlbW90ZQogd2FrZXVwIG1heSBmYWlsIGFuZCBnZXQgbG9zdC4gIFdoaWNoIG91dGNvbWUgb2NjdXJzIGRlcGVuZHMgb24gdGltaW5nCiBhbmQgb24gdGhlIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBkZXNpZ24uCi0KLU1vcmUgaW50ZXJlc3RpbmdseSwgYSBkZXZpY2UgbWlnaHQgdW5kZXJnbyBhIG1hbnVhbCByZXN1bWUgb3IKLWF1dG9yZXN1bWUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLiAgV2l0aCBjdXJyZW50IGtlcm5lbHMgdGhpcyBzaG91bGRuJ3QKLWhhcHBlbiwgYmVjYXVzZSBtYW51YWwgcmVzdW1lcyBtdXN0IGJlIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgYW5kCi1hdXRvcmVzdW1lcyBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLCBidXQgYWxsIHVzZXIgcHJvY2Vzc2VzCi1hbmQgSS9PIHNob3VsZCBiZSBxdWllc2NlbnQgZHVyaW5nIGEgc3lzdGVtIHN1c3BlbmQgLS0gdGhhbmtzIHRvIHRoZQotZnJlZXplci4gIEhvd2V2ZXIgdGhlcmUgYXJlIHBsYW5zIHRvIGRvIGF3YXkgd2l0aCB0aGUgZnJlZXplciwgd2hpY2gKLXdvdWxkIG1lYW4gdGhlc2UgdGhpbmdzIHdvdWxkIGJlY29tZSBwb3NzaWJsZS4gIElmIGFuZCB3aGVuIHRoaXMgY29tZXMKLWFib3V0LCB0aGUgVVNCIGNvcmUgd2lsbCBjYXJlZnVsbHkgYXJyYW5nZSBtYXR0ZXJzIHNvIHRoYXQgZWl0aGVyIHR5cGUKLW9mIHJlc3VtZSB3aWxsIGJsb2NrIHVudGlsIHRoZSBlbnRpcmUgc3lzdGVtIGhhcyByZXN1bWVkLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBlZmQyZWYyLi43NDU2NDNiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTQwMiw2ICsxNDAyLDggQEAKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi91c2IvV1VTQi1EZXNpZ24tb3ZlcnZpZXcudHh0CiBGOglEb2N1bWVudGF0aW9uL3VzYi93dXNiLWNiYWYKK0Y6CWRyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKK0Y6CWRyaXZlcnMvdXNiL2hvc3Qvd2hjaS8KIEY6CWRyaXZlcnMvdXNiL3d1c2Jjb3JlLwogRjoJaW5jbHVkZS9saW51eC91c2Ivd3VzYioKIApAQCAtMzY3Nyw3ICszNjc5LDcgQEAKIE1VU0IgTVVMVElQT0lOVCBISUdIIFNQRUVEIERVQUwtUk9MRSBDT05UUk9MTEVSCiBNOglGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBub2tpYS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9tdXNiL21haW5saW5lLmdpdAorVDoJZ2l0IGdpdDovL2dpdG9yaW91cy5vcmcvdXNiL3VzYi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdXNiL211c2IvCiAKQEAgLTU0MzAsNyArNTQzMiwxMCBAQAogTToJRGF2aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY3NyLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAotRjoJZHJpdmVycy91d2IvKgorRjoJZHJpdmVycy91d2IvCitYOglkcml2ZXJzL3V3Yi93bHAvCitYOglkcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwLworWDoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtd2xwLmgKIEY6CWluY2x1ZGUvbGludXgvdXdiLmgKIEY6CWluY2x1ZGUvbGludXgvdXdiLwogCkBAIC01OTQzLDkgKzU5NDgsMTIgQEAKIAogV0lNRURJQSBMTEMgUFJPVE9DT0wgKFdMUCkgU1VCU1lTVEVNCiBNOglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJaW5jbHVkZS9saW51eC93bHAuaAogRjoJZHJpdmVycy91d2Ivd2xwLworRjoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC8KK0Y6CWRyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLXdscC5oCiAKIFdJU1RST04gTEFQVE9QIEJVVFRPTiBEUklWRVIKIE06CU1pbG9zbGF2IFRybWFjIDxtaXRyQHZvbG55LmN6PgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAwYWM1ODEyLi5lNmIwNmNiZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDEzIEBACiAjIG8gIHByaW50ICJFbnRlcmluZyBkaXJlY3RvcnkgLi4uIjsKIE1BS0VGTEFHUyArPSAtclIgLS1uby1wcmludC1kaXJlY3RvcnkKIAorIyBBdm9pZCBmdW5ueSBjaGFyYWN0ZXIgc2V0IGRlcGVuZGVuY2llcwordW5leHBvcnQgTENfQUxMCitMQ19DVFlQRT1DCitMQ19DT0xMQVRFPUMKK0xDX05VTUVSSUM9QworZXhwb3J0IExDX0NUWVBFIExDX0NPTExBVEUgTENfTlVNRVJJQworCiAjIFdlIGFyZSB1c2luZyBhIHJlY3Vyc2l2ZSBidWlsZCwgc28gd2UgbmVlZCB0byBkbyBhIGxpdHRsZSB0aGlua2luZwogIyB0byBnZXQgdGhlIG9yZGVyaW5nIHJpZ2h0LgogIwpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IGQ4Mjg3NTgyLi45ZDA1NWI0IDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xMzUsOSArMTM1LDcgQEAKIAogY29uZmlnIEhBVkVfSFdfQlJFQUtQT0lOVAogCWJvb2wKLQlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKLQlzZWxlY3QgQU5PTl9JTk9ERVMKLQlzZWxlY3QgUEVSRl9FVkVOVFMKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTCiAKIGNvbmZpZyBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDQ0MzQ0ODEuLmJkNzI2MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1dSQVBQRVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAloZWxwCiAJICBUaGUgQWxwaGEgaXMgYSA2NC1iaXQgZ2VuZXJhbC1wdXJwb3NlIHByb2Nlc3NvciBkZXNpZ25lZCBhbmQKIAkgIG1hcmtldGVkIGJ5IHRoZSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBvZiBibGVzc2VkIG1lbW9yeSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDE3MjBjOGEuLmYwOTE2ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9idWcuaApAQCAtMTMsNyArMTMsOCBAQAogCQkiY2FsbF9wYWwgJTAgICMgYnVnY2hrXG5cdCIJCQkJXAogCQkiLmxvbmcgJTFcblx0LjhieXRlICUyIgkJCQkJXAogCQk6IDogImkiKFBBTF9idWdjaGspLCAiaSIoX19MSU5FX18pLCAiaSIoX19GSUxFX18pKTsJXAotCWZvciAoIDsgOyApOyB9IHdoaWxlICgwKQorCXVucmVhY2hhYmxlKCk7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlZjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfUEVSRl9FVkVOVF9ICisKKy8qIEFscGhhIG9ubHkgc3VwcG9ydHMgc29mdHdhcmUgZXZlbnRzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKSB7IH0KKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCisKKyNlbmRpZiAvKiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDdmMjM2NjUuLjgwNGU1MzExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTI0Nyw2ICsyNDcsNyBAQAogI2RlZmluZSBfX0lHTk9SRV9wYXVzZQogI2RlZmluZSBfX0lHTk9SRV90aW1lCiAjZGVmaW5lIF9fSUdOT1JFX3V0aW1lCisjZGVmaW5lIF9fSUdOT1JFX3Vtb3VudDIKIAogLyoKICAqIExpbnV4LXNwZWNpZmljIHN5c3RlbSBjYWxscyBiZWdpbiBhdCAzMDAKQEAgLTQzNCwxMCArNDM1LDI0IEBACiAjZGVmaW5lIF9fTlJfdGltZXJmZAkJCTQ3NwogI2RlZmluZSBfX05SX2V2ZW50ZmQJCQk0NzgKICNkZWZpbmUgX19OUl9yZWN2bW1zZwkJCTQ3OQorI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJCTQ4MAorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCQk0ODEKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJCTQ4MgorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkJNDgzCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkJNDg0CisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCQk0ODUKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCQk0ODYKKyNkZWZpbmUgX19OUl9kdXAzCQkJNDg3CisjZGVmaW5lIF9fTlJfcGlwZTIJCQk0ODgKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQk0ODkKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQk0OTAKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJNDkxCisjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JCTQ5MgorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJNDkzCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0ODAKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0OTQKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCmluZGV4IGNkYTZiOGIuLjA5YWNiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQ5NSw5ICs0OTUsMjMgQEAKIAkucXVhZCBzeXNfZXBvbGxfcHdhaXQKIAkucXVhZCBzeXNfdXRpbWVuc2F0CQkJLyogNDc1ICovCiAJLnF1YWQgc3lzX3NpZ25hbGZkCi0JLnF1YWQgc3lzX25pX3N5c2NhbGwKKwkucXVhZCBzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c190aW1lcmZkICovCiAJLnF1YWQgc3lzX2V2ZW50ZmQKIAkucXVhZCBzeXNfcmVjdm1tc2cKKwkucXVhZCBzeXNfZmFsbG9jYXRlCQkJCS8qIDQ4MCAqLworCS5xdWFkIHN5c190aW1lcmZkX2NyZWF0ZQorCS5xdWFkIHN5c190aW1lcmZkX3NldHRpbWUKKwkucXVhZCBzeXNfdGltZXJmZF9nZXR0aW1lCisJLnF1YWQgc3lzX3NpZ25hbGZkNAorCS5xdWFkIHN5c19ldmVudGZkMgkJCQkvKiA0ODUgKi8KKwkucXVhZCBzeXNfZXBvbGxfY3JlYXRlMQorCS5xdWFkIHN5c19kdXAzCisJLnF1YWQgc3lzX3BpcGUyCisJLnF1YWQgc3lzX2lub3RpZnlfaW5pdDEKKwkucXVhZCBzeXNfcHJlYWR2CQkJCS8qIDQ5MCAqLworCS5xdWFkIHN5c19wd3JpdGV2CisJLnF1YWQgc3lzX3J0X3Rnc2lncXVldWVpbmZvCisJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogCiAJLnNpemUgc3lzX2NhbGxfdGFibGUsIC4gLSBzeXNfY2FsbF90YWJsZQogCS50eXBlIHN5c19jYWxsX3RhYmxlLCBAb2JqZWN0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDUxZWI2ZWQuLjhmMzQ1ZGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTA4LDEyICsxMDgsMTkgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCU1RMDogbXEgeworCQljb21wYXRpYmxlID0gImlibSxtcS00NDBzcGUiOworCQlkY3ItcmVnID0gPDB4MDQwIDB4MDIwPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ0MHNwZSIsICJpYm0scGxiLTQ0MGdwIiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQkvKiAgICAgICAgYWRkci1jaGlsZCAgICAgYWRkci1wYXJlbnQgICAgc2l6ZSAqLwotCQlyYW5nZXMgPSA8MHg0IDB4ZTAwMDAwMDAgMHg0IDB4ZTAwMDAwMDAgMHgyMDAwMDAwMAorCQlyYW5nZXMgPSA8MHg0IDB4MDAxMDAwMDAgMHg0IDB4MDAxMDAwMDAgMHgwMDAwMTAwMAorCQkJICAweDQgMHgwMDIwMDAwMCAweDQgMHgwMDIwMDAwMCAweDAwMDAwNDAwCisJCQkgIDB4NCAweGUwMDAwMDAwIDB4NCAweGUwMDAwMDAwIDB4MjAwMDAwMDAKIAkJCSAgMHhjIDB4MDAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgyMDAwMDAwMAogCQkJICAweGQgMHgwMDAwMDAwMCAweGQgMHgwMDAwMDAwMCAweDgwMDAwMDAwCiAJCQkgIDB4ZCAweDgwMDAwMDAwIDB4ZCAweDgwMDAwMDAwIDB4ODAwMDAwMDAKQEAgLTQwMCw2ICs0MDcsNDkgQEAKIAkJCQkweDAgMHgwIDB4MCAweDMgJlVJQzMgMHhhIDB4NCAvKiBzd2l6emxlZCBpbnQgQyAqLwogCQkJCTB4MCAweDAgMHgwIDB4NCAmVUlDMyAweGIgMHg0IC8qIHN3aXp6bGVkIGludCBEICovPjsKIAkJfTsKKworCQlJMk86IGkyb0A0MDAxMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJpYm0saTJvLTQ0MHNwZSI7CisJCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMDAwIDB4MTAwPjsKKwkJCWRjci1yZWcgPSA8MHgwNjAgMHgwMjA+OworCQl9OworCisJCURNQTA6IGRtYTBANDAwMTAwMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGRtYS00NDBzcGUiOworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAxMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZETUEwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwICZVSUMwIDB4MTQgNAorCQkJCTEgJlVJQzEgMHgxNiA0PjsKKwkJfTsKKworCQlETUExOiBkbWExQDQwMDEwMDIwMCB7CisJCQljb21wYXRpYmxlID0gImlibSxkbWEtNDQwc3BlIjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMjAwIDB4MTAwPjsKKwkJCWRjci1yZWcgPSA8MHgwNjAgMHgwMjA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRE1BMT47CisJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisJCQkJMCAmVUlDMCAweDE2IDQKKwkJCQkxICZVSUMxIDB4MTYgND47CisJCX07CisKKwkJeG9yLWFjY2VsQDQwMDIwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MseG9yLWFjY2VsZXJhdG9yIjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAyMDAwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgND47CisJCX07CiAJfTsKIAogCWNob3NlbiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwppbmRleCAzMmUxMGY1Li44YTNhNGYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkwID47CisJCQlmc2wsbWFnaWMtcGFja2V0OwogCiAJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yNDYsNiArMjQ3LDcgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5MSA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKIAogCQkJbWRpb0A1MjAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzA5LDYgKzMxMSwyMiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCX07CiAKKwkJZ3RtMTogdGltZXJANTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZ3RtIiwgImZzbCxndG0iOworCQkJcmVnID0gPDB4NTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8OTAgOCA3OCA4IDg0IDggNzIgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCQl9OworCisJCXRpbWVyQDYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LWd0bSIsICJmc2wsZ3RtIjsKKwkJCXJlZyA9IDwweDYwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDkxIDggNzkgOCA4NSA4IDczIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkJfTsKKwogCQkvKiBJUElDCiAJCSAqIGludGVycnVwdHMgY2VsbCA9IDxpbnRyICMsIHNlbnNlPgogCQkgKiBzZW5zZSB2YWx1ZXMgbWF0Y2ggbGludXggSU9SRVNPVVJDRV9JUlFfKiBkZWZpbmVzOgpAQCAtMzM3LDYgKzM1NSwxNSBAQAogCQkJCSAgICAgIDB4NTkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1wbWMiLCAiZnNsLG1wYzgzMTMtcG1jIiwKKwkJCQkgICAgICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWZzbCxtcGM4MzEzLXdha2V1cC10aW1lciA9IDwmZ3RtMT47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IGZlZWViN2YuLmI1M2QxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC02Myw2ICs2MywyNCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAorCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC03Miw2ICs5MCwxMiBAQAogCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlkZnNycjsKKworCQkJZWVwcm9tOiBhdDI0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gInN0LW1pY3JvLDI0YzI1NiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQl9OwogCiAJCWkyY0AzMTAwIHsKQEAgLTkxLDYgKzExNSwyNSBAQAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJfTsKIAorCQkJcGNmMTogaWV4cEAzOCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwY2Y4NTc0YSI7CisJCQkJcmVnID0gPDB4Mzg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKKwkJCXBjZjI6IGlleHBAMzkgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAidGkscGNmODU3NGEiOworCQkJCXJlZyA9IDwweDM5PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OworCisJCQlzcGQ6IGF0MjRANTEgeworCQkJCWNvbXBhdGlibGUgPSAiYXQyNCxzcGQiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisKIAkJCW1jdV9waW86IG1jdUBhIHsKIAkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM0OWVtaXR4IiwKQEAgLTI3NSw2ICszMTgsMjQgQEAKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJpcGljIjsKIAkJfTsKKworCQlncGlvLWxlZHMgeworCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCQlncmVlbiB7CisJCQkJbGFiZWwgPSAiR3JlZW4iOworCQkJCWdwaW9zID0gPCZwY2YxIDAgMT47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQl9OworCisJCQl5ZWxsb3cgeworCQkJCWxhYmVsID0gIlllbGxvdyI7CisJCQkJZ3Bpb3MgPSA8JnBjZjEgMSAxPjsKKwkJCQkvKiBsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsgKi8KKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCX07CisJCX07CisKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTMzMSw3ICszOTIsMjYgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWUtbG9jYWxidXMiLAogCQkJICAgICAiZnNsLHBxMnByby1sb2NhbGJ1cyI7CiAJCXJlZyA9IDwweGUwMDA1MDAwIDB4ZDg+OwotCQlyYW5nZXMgPSA8MHgzIDB4MCAweGYwMDAwMDAwIDB4MjEwPjsKKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDEwMDAwMDAJLyogZmxhc2ggKi8KKwkJCSAgMHgxIDB4MCAweGY4MDAwMDAwIDB4MjAwMDAJLyogVlNDIDczODUgKi8KKwkJCSAgMHgyIDB4MCAweGY5MDAwMDAwIDB4MjAwMDAwCS8qIGV4cCBzbG90ICovCisJCQkgIDB4MyAweDAgMHhmMDAwMDAwMCAweDIxMD47CS8qIENGIHNsb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAgICAgIDB4MCAweDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCQl9OworCisJCWZsYXNoQDAsODAwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4ODAwMDAwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CiAKIAkJcGF0YUAzLDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWVtaXR4LXBhdGEiLCAiYXRhLWdlbmVyaWMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzCmluZGV4IDMxNjA1ZWUuLmU1NzZlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YXJwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJCQkJZnBnYUAyLDQwMDAgewogCQkJCQljb21wYXRpYmxlID0gInBpa2EsZnBnYS1zZCI7Ci0JCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwMEEwMD47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwNDAwMD47CiAJCQkJfTsKIAogCQkJCW5vckAwLDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvdWdlY29uLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYwppbmRleCA1MDYwOWVhLi44ZjJhNmIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYwpAQCAtODYsNyArODYsNyBAQAogCiAJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQogCQliYXJyaWVyKCk7Ci0JaWYgKGNvdW50KQorCWlmIChjb3VudCA+PSAwKQogCQl1Z19yYXdfcHV0YyhjaCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwppbmRleCBmYzkwNTkyLi44MjZhNjVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCkBAIC03NTcsNyArNzU3LDcgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQpAQCAtNzk0LDggKzc5NCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCBmOTI1YzU1Li43Njk4MmM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtNzE0LDggKzcxNCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDI1MjQwMTguLjdiMzgwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTMwNCwxMSArMzA0LDExIEBACiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldApAQCAtOTgwLDcgKzk4MCw3IEBACiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CkBAIC0xMDIzLDggKzEwMjMsOCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKQEAgLTE4NjMsNyArMTg2Myw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15CitDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwppbmRleCAxOGFmNDYwLi44MTk1ZjE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTEwMDgsOCArMTAwOCw4IEBACiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IGM1NjgzMjkuLmNhOWZmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0yMzAsMTEgKzIzMCwxMSBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAorQ09ORklHX0haPTEwMAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKQEAgLTc5Niw3ICs3OTYsNyBAQAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQpAQCAtODM0LDggKzgzNCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApAQCAtMTQ5NCw3ICsxNDk0LDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaAppbmRleCA2NGUxZmRjLi4yYzE1MjEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC02OCw3ICs2OCw3IEBACiAJCV9FTUlUX0JVR19FTlRSWQkJCQkJXAogCQk6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAkJXAogCQkgICAgImkiICgwKSwgImkiICAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSk7CVwKLQlmb3IoOzspIDsJCQkJCQlcCisJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEJVR19PTih4KSBkbyB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggZWEwNDYzMi4uMzg3NjJlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0zOCwxMiArMzgsOSBAQAogCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7CiB9CiAKLS8qCi0gKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCiB7Ci0JcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIF9fZ3Bpb190b19pcnEoZ3Bpbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKaW5kZXggMzgzOTgzOS4uYjg3NmU5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKQEAgLTY0MiwxMCArNjQyLDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgZW11bGF0ZV92c3godW5zaWduZWQgY2hhciBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGludCByZWcsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgYXJlZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBsZW5ndGgpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZWxzaXplKQogewogCWNoYXIgKnB0cjsKKwl1bnNpZ25lZCBsb25nICpscHRyOwogCWludCByZXQgPSAwOworCWludCBzdyA9IDA7CisJaW50IGksIGo7CiAKIAlmbHVzaF92c3hfdG9fdGhyZWFkKGN1cnJlbnQpOwogCkBAIC02NTQsMTkgKzY1OCwzNSBAQAogCWVsc2UKIAkJcHRyID0gKGNoYXIgKikgJmN1cnJlbnQtPnRocmVhZC52cltyZWcgLSAzMl07CiAKLQlpZiAoZmxhZ3MgJiBTVCkKLQkJcmV0ID0gX19jb3B5X3RvX3VzZXIoYWRkciwgcHRyLCBsZW5ndGgpOwotICAgICAgICBlbHNlIHsKLQkJaWYgKGZsYWdzICYgU1BMVCl7Ci0JCQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyKHB0ciwgYWRkciwgbGVuZ3RoKTsKLQkJCXB0ciArPSBsZW5ndGg7CisJbHB0ciA9ICh1bnNpZ25lZCBsb25nICopIHB0cjsKKworCWlmIChmbGFncyAmIFNXKQorCQlzdyA9IGVsc2l6ZS0xOworCisJZm9yIChqID0gMDsgaiA8IGxlbmd0aDsgaiArPSBlbHNpemUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGVsc2l6ZTsgKytpKSB7CisJCQlpZiAoZmxhZ3MgJiBTVCkKKwkJCQlyZXQgfD0gX19wdXRfdXNlcihwdHJbaV5zd10sIGFkZHIgKyBpKTsKKwkJCWVsc2UKKwkJCQlyZXQgfD0gX19nZXRfdXNlcihwdHJbaV5zd10sIGFkZHIgKyBpKTsKIAkJfQotCQlyZXQgfD0gX19jb3B5X2Zyb21fdXNlcihwdHIsIGFkZHIsIGxlbmd0aCk7CisJCXB0ciAgKz0gZWxzaXplOworCQlhZGRyICs9IGVsc2l6ZTsKIAl9Ci0JaWYgKGZsYWdzICYgVSkKLQkJcmVncy0+Z3ByW2FyZWddID0gcmVncy0+ZGFyOwotCWlmIChyZXQpCisKKwlpZiAoIXJldCkgeworCQlpZiAoZmxhZ3MgJiBVKQorCQkJcmVncy0+Z3ByW2FyZWddID0gcmVncy0+ZGFyOworCisJCS8qIFNwbGF0IGxvYWQgY29waWVzIHRoZSBzYW1lIGRhdGEgdG8gdG9wIGFuZCBib3R0b20gOCBieXRlcyAqLworCQlpZiAoZmxhZ3MgJiBTUExUKQorCQkJbHB0clsxXSA9IGxwdHJbMF07CisJCS8qIEZvciA4IGJ5dGUgbG9hZHMsIHplcm8gdGhlIHRvcCA4IGJ5dGVzICovCisJCWVsc2UgaWYgKCEoZmxhZ3MgJiBTVCkgJiYgKDggPT0gbGVuZ3RoKSkKKwkJCWxwdHJbMV0gPSAwOworCX0gZWxzZQogCQlyZXR1cm4gLUVGQVVMVDsKKwogCXJldHVybiAxOwogfQogI2VuZGlmCkBAIC03NjcsMTYgKzc4NywyNSBAQAogCiAjaWZkZWYgQ09ORklHX1ZTWAogCWlmICgoaW5zdHJ1Y3Rpb24gJiAweGZjMDAwMDNlKSA9PSAweDdjMDAwMDE4KSB7Ci0JCS8qIEFkZGl0aW9uYWwgcmVnaXN0ZXIgYWRkcmVzc2luZyBiaXQgKDY0IFZTWCB2cyAzMiBGUFIvR1BSICovCisJCXVuc2lnbmVkIGludCBlbHNpemU7CisKKwkJLyogQWRkaXRpb25hbCByZWdpc3RlciBhZGRyZXNzaW5nIGJpdCAoNjQgVlNYIHZzIDMyIEZQUi9HUFIpICovCiAJCXJlZyB8PSAoaW5zdHJ1Y3Rpb24gJiAweDEpIDw8IDU7CiAJCS8qIFNpbXBsZSBpbmxpbmUgZGVjb2RlciBpbnN0ZWFkIG9mIGEgdGFibGUgKi8KKwkJLyogVlNYIGhhcyBvbmx5IDggYW5kIDE2IGJ5dGUgbWVtb3J5IGFjY2Vzc2VzICovCisJCW5iID0gODsKIAkJaWYgKGluc3RydWN0aW9uICYgMHgyMDApCiAJCQluYiA9IDE2OwotCQllbHNlIGlmIChpbnN0cnVjdGlvbiAmIDB4MDgwKQotCQkJbmIgPSA4OwotCQllbHNlCi0JCQluYiA9IDQ7CisKKwkJLyogVmVjdG9yIHN0b3JlcyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUgc3dhcCBpbmRpdmlkdWFsCisJCSAgIGVsZW1lbnRzLCBzbyBwcm9jZXNzIHRoZW0gc2VwYXJhdGVseSAqLworCQllbHNpemUgPSA0OworCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDgwKQorCQkJZWxzaXplID0gODsKKwogCQlmbGFncyA9IDA7CisJCWlmIChyZWdzLT5tc3IgJiBNU1JfTEUpCisJCQlmbGFncyB8PSBTVzsKIAkJaWYgKGluc3RydWN0aW9uICYgMHgxMDApCiAJCQlmbGFncyB8PSBTVDsKIAkJaWYgKGluc3RydWN0aW9uICYgMHgwNDApCkBAIC03ODcsNyArODE2LDcgQEAKIAkJCW5iID0gODsKIAkJfQogCQlQUENfV0FSTl9BTElHTk1FTlQodnN4LCByZWdzKTsKLQkJcmV0dXJuIGVtdWxhdGVfdnN4KGFkZHIsIHJlZywgYXJlZywgcmVncywgZmxhZ3MsIG5iKTsKKwkJcmV0dXJuIGVtdWxhdGVfdnN4KGFkZHIsIHJlZywgYXJlZywgcmVncywgZmxhZ3MsIG5iLCBlbHNpemUpOwogCX0KICNlbmRpZgogCS8qIEEgc2l6ZSBvZiAwIGluZGljYXRlcyBhbiBpbnN0cnVjdGlvbiB3ZSBkb24ndCBzdXBwb3J0LCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA1MGY4NjdkLi4zZWNkY2VjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCQkJZWxzZQogCQkJCWRlZi0+dGxiaWVsID0gMDsKIAotCQkJREJHKCIgJWQ6IHNoaWZ0PSUwMngsIHNsbHA9JTA0eCwgYXZwbm09JTA4eCwgIgorCQkJREJHKCIgJWQ6IHNoaWZ0PSUwMngsIHNsbHA9JTA0bHgsIGF2cG5tPSUwOGx4LCAiCiAJCQkgICAgInRsYmllbD0lZCwgcGVuYz0lZFxuIiwKIAkJCSAgICBpZHgsIHNoaWZ0LCBkZWYtPnNsbHAsIGRlZi0+YXZwbm0sIGRlZi0+dGxiaWVsLAogCQkJICAgIGRlZi0+cGVuYyk7CkBAIC02NjMsNyArNjYzLDcgQEAKIAkJYmFzZSA9ICh1bnNpZ25lZCBsb25nKV9fdmEobG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSk7CiAJCXNpemUgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplOwogCi0JCURCRygiY3JlYXRpbmcgbWFwcGluZyBmb3IgcmVnaW9uOiAlbHguLiVseCAocHJvdDogJXgpXG4iLAorCQlEQkcoImNyZWF0aW5nIG1hcHBpbmcgZm9yIHJlZ2lvbjogJWx4Li4lbHggKHByb3Q6ICVseClcbiIsCiAJCSAgICBiYXNlLCBzaXplLCBwcm90KTsKIAogI2lmZGVmIENPTkZJR19VM19EQVJUCkBAIC04NzksNyArODc5LDcgQEAKICAqLwogaW50IGhhc2hfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIGFjY2VzcywgdW5zaWduZWQgbG9uZyB0cmFwKQogewotCXZvaWQgKnBnZGlyOworCXBnZF90ICpwZ2RpcjsKIAl1bnNpZ25lZCBsb25nIHZzaWQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJcHRlX3QgKnB0ZXA7CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCWVsc2UKICNlbmRpZiAvKiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyAqLwogCXsKLQkJaW50IHNwcCA9IHN1YnBhZ2VfcHJvdGVjdGlvbihwZ2RpciwgZWEpOworCQlpbnQgc3BwID0gc3VicGFnZV9wcm90ZWN0aW9uKG1tLCBlYSk7CiAJCWlmIChhY2Nlc3MgJiBzcHApCiAJCQlyYyA9IC0yOwogCQllbHNlCkBAIC0xMTE1LDcgKzExMTUsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgaGFzaCwgaW5kZXgsIHNoaWZ0LCBoaWR4LCBzbG90OwogCi0JREJHX0xPVygiZmx1c2hfaGFzaF9wYWdlKHZhPSUwMTZ4KVxuIiwgdmEpOworCURCR19MT1coImZsdXNoX2hhc2hfcGFnZSh2YT0lMDE2bHgpXG4iLCB2YSk7CiAJcHRlX2l0ZXJhdGVfaGFzaGVkX3N1YnBhZ2VzKHB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpIHsKIAkJaGFzaCA9IGhwdF9oYXNoKHZhLCBzaGlmdCwgc3NpemUpOwogCQloaWR4ID0gX19ycHRlX3RvX2hpZHgocHRlLCBpbmRleCk7CkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCQkJaGFzaCA9IH5oYXNoOwogCQlzbG90ID0gKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKiBIUFRFU19QRVJfR1JPVVA7CiAJCXNsb3QgKz0gaGlkeCAmIF9QVEVJRFhfR1JPVVBfSVg7Ci0JCURCR19MT1coIiBzdWIgJWQ6IGhhc2g9JXgsIGhpZHg9JXhcbiIsIGluZGV4LCBzbG90LCBoaWR4KTsKKwkJREJHX0xPVygiIHN1YiAlbGQ6IGhhc2g9JWx4LCBoaWR4PSVseFxuIiwgaW5kZXgsIHNsb3QsIGhpZHgpOwogCQlwcGNfbWQuaHB0ZV9pbnZhbGlkYXRlKHNsb3QsIHZhLCBwc2l6ZSwgc3NpemUsIGxvY2FsKTsKIAl9IHB0ZV9pdGVyYXRlX2hhc2hlZF9lbmQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCBiZTRmMzRjLi4xMDQ0YTYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiAJCQlpZiAocC0+bW0pCi0JCQkJY3B1X21hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwLT5tbSkpOworCQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwLT5tbSkpOwogCQl9CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCmluZGV4IDE3N2U0MDMuLjU3M2IzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXJldHVybiAwOwogCWlmICghZ2V0X3B0ZXB0cigmaW5pdF9tbSwgYWRkcmVzcywgJmtwdGUsICZrcG1kKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2V0X3B0ZV9hdCgmaW5pdF9tbSwgYWRkcmVzcywga3B0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwlfX3NldF9wdGVfYXQoJmluaXRfbW0sIGFkZHJlc3MsIGtwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSwgMCk7CiAJd21iKCk7CiAjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VCiAJZmx1c2hfaGFzaF9wYWdlcygwLCBhZGRyZXNzLCBwbWRfdmFsKCprcG1kKSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwppbmRleCBkMzA2ZjA3Li40MzgwNTM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgUE1DQ1IxX05FWFRfU1RBVEUgICAgICAgMHgwQyAvKiBOZXh0IHN0YXRlIGZvciBwb3dlciBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIFBNQ0NSMV9ORVhUX1NUQVRFX1NISUZUIDIKICNkZWZpbmUgUE1DQ1IxX0NVUlJfU1RBVEUgICAgICAgMHgwMyAvKiBDdXJyZW50IHN0YXRlIGZvciBwb3dlciBtYW5hZ2VtZW50Ki8KKyNkZWZpbmUgSU1NUl9TWVNDUl9PRkZTRVQgICAgICAgMHgxMDAKICNkZWZpbmUgSU1NUl9SQ1dfT0ZGU0VUICAgICAgICAgMHg5MDAKICNkZWZpbmUgUkNXX1BDSV9IT1NUICAgICAgICAgICAgMHg4MDAwMDAwMAogCkBAIC03OCw2ICs3OSwyMiBAQAogCXUzMiBzY2NyOwogfTsKIAorc3RydWN0IG1wYzgzeHhfc3lzY3IgeworCV9fYmUzMiBzZ3BybDsKKwlfX2JlMzIgc2dwcmg7CisJX19iZTMyIHNwcmlkcjsKKwlfX2JlMzIgOjMyOworCV9fYmUzMiBzcGNyOworCV9fYmUzMiBzaWNybDsKKwlfX2JlMzIgc2ljcmg7Cit9OworCitzdHJ1Y3QgbXBjODN4eF9zYXZlZCB7CisJdTMyIHNpY3JsOworCXUzMiBzaWNyaDsKKwl1MzIgc2NjcjsKK307CisKIHN0cnVjdCBwbWNfdHlwZSB7CiAJaW50IGhhc19kZWVwX3NsZWVwOwogfTsKQEAgLTg3LDYgKzEwNCw4IEBACiBzdGF0aWMgaW50IHBtY19pcnE7CiBzdGF0aWMgc3RydWN0IG1wYzgzeHhfcG1jIF9faW9tZW0gKnBtY19yZWdzOwogc3RhdGljIHN0cnVjdCBtcGM4M3h4X2Nsb2NrIF9faW9tZW0gKmNsb2NrX3JlZ3M7CitzdGF0aWMgc3RydWN0IG1wYzgzeHhfc3lzY3IgX19pb21lbSAqc3lzY3JfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgbXBjODN4eF9zYXZlZCBzYXZlZF9yZWdzOwogc3RhdGljIGludCBpc19wY2lfYWdlbnQsIHdha2VfZnJvbV9wY2k7CiBzdGF0aWMgcGh5c19hZGRyX3QgaW1tcmJhc2U7CiBzdGF0aWMgaW50IHBjaV9wbV9zdGF0ZTsKQEAgLTEzNyw2ICsxNTYsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBtcGM4M3h4X3N1c3BlbmRfcmVzdG9yZV9yZWdzKHZvaWQpCit7CisJb3V0X2JlMzIoJnN5c2NyX3JlZ3MtPnNpY3JsLCBzYXZlZF9yZWdzLnNpY3JsKTsKKwlvdXRfYmUzMigmc3lzY3JfcmVncy0+c2ljcmgsIHNhdmVkX3JlZ3Muc2ljcmgpOworCW91dF9iZTMyKCZjbG9ja19yZWdzLT5zY2NyLCBzYXZlZF9yZWdzLnNjY3IpOworfQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3N1c3BlbmRfc2F2ZV9yZWdzKHZvaWQpCit7CisJc2F2ZWRfcmVncy5zaWNybCA9IGluX2JlMzIoJnN5c2NyX3JlZ3MtPnNpY3JsKTsKKwlzYXZlZF9yZWdzLnNpY3JoID0gaW5fYmUzMigmc3lzY3JfcmVncy0+c2ljcmgpOworCXNhdmVkX3JlZ3Muc2NjciA9IGluX2JlMzIoJmNsb2NrX3JlZ3MtPnNjY3IpOworfQorCiBzdGF0aWMgaW50IG1wYzgzeHhfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CiAJaW50IHJldCA9IC1FQUdBSU47CkBAIC0xNjYsNiArMTk5LDggQEAKIAkgKi8KIAogCWlmIChkZWVwX3NsZWVwaW5nKSB7CisJCW1wYzgzeHhfc3VzcGVuZF9zYXZlX3JlZ3MoKTsKKwogCQlvdXRfYmUzMigmcG1jX3JlZ3MtPm1hc2ssIFBNQ0VSX0FMTCk7CiAKIAkJb3V0X2JlMzIoJnBtY19yZWdzLT5jb25maWcxLApAQCAtMTc5LDYgKzIxNCw4IEBACiAJCSAgICAgICAgIGluX2JlMzIoJnBtY19yZWdzLT5jb25maWcxKSAmIH5QTUNDUjFfUE9XRVJfT0ZGKTsKIAogCQlvdXRfYmUzMigmcG1jX3JlZ3MtPm1hc2ssIFBNQ0VSX1BNQ0kpOworCisJCW1wYzgzeHhfc3VzcGVuZF9yZXN0b3JlX3JlZ3MoKTsKIAl9IGVsc2UgewogCQlvdXRfYmUzMigmcG1jX3JlZ3MtPm1hc2ssIFBNQ0VSX1BNQ0kpOwogCkBAIC0xOTQsNyArMjMxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtcGM4M3h4X3N1c3BlbmRfZmluaXNoKHZvaWQpCitzdGF0aWMgdm9pZCBtcGM4M3h4X3N1c3BlbmRfZW5kKHZvaWQpCiB7CiAJZGVlcF9zbGVlcGluZyA9IDA7CiB9CkBAIC0yNzgsNyArMzE1LDcgQEAKIAkudmFsaWQgPSBtcGM4M3h4X3N1c3BlbmRfdmFsaWQsCiAJLmJlZ2luID0gbXBjODN4eF9zdXNwZW5kX2JlZ2luLAogCS5lbnRlciA9IG1wYzgzeHhfc3VzcGVuZF9lbnRlciwKLQkuZmluaXNoID0gbXBjODN4eF9zdXNwZW5kX2ZpbmlzaCwKKwkuZW5kID0gbXBjODN4eF9zdXNwZW5kX2VuZCwKIH07CiAKIHN0YXRpYyBpbnQgcG1jX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LApAQCAtMzMzLDEyICszNzAsMjMgQEAKIAkJZ290byBvdXRfcG1jOwogCX0KIAorCWlmIChoYXNfZGVlcF9zbGVlcCkgeworCQlzeXNjcl9yZWdzID0gaW9yZW1hcChpbW1yYmFzZSArIElNTVJfU1lTQ1JfT0ZGU0VULAorCQkJCSAgICAgc2l6ZW9mKCpzeXNjcl9yZWdzKSk7CisJCWlmICghc3lzY3JfcmVncykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X3N5c2NyOworCQl9CisJfQorCiAJaWYgKGlzX3BjaV9hZ2VudCkKIAkJbXBjODN4eF9zZXRfYWdlbnQoKTsKIAogCXN1c3BlbmRfc2V0X29wcygmbXBjODN4eF9zdXNwZW5kX29wcyk7CiAJcmV0dXJuIDA7CiAKK291dF9zeXNjcjoKKwlpb3VubWFwKGNsb2NrX3JlZ3MpOwogb3V0X3BtYzoKIAlpb3VubWFwKHBtY19yZWdzKTsKIG91dDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKaW5kZXggYzUwMjhhMi4uMjFmNjFiOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAlzY3IgPSBwaHlfcmVhZChwaHlkZXYsIE1WODhFMTExMV9TQ1IpOwogCiAJaWYgKHNjciA8IDApCi0JCXJldHVybiBlcnI7CisJCXJldHVybiBzY3I7CiAKIAllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNVjg4RTExMTFfU0NSLCBzY3IgfCAweDAwMDgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKaW5kZXggZDU5NjMyOC4uYzI3OGJkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CiAJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZmbGlwcGVyX3BpYywgaGFuZGxlX2xldmVsX2lycSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKaW5kZXggZGQyMGJmZi4uYTc3MWY5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYwpAQCAtOTUsNyArOTUsNyBAQAogCQkJICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewogCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIGgtPmhvc3RfZGF0YSk7Ci0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmaGx3ZF9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXJldHVybiAwOwogfQpAQCAtMTMyLDkgKzEzMiw5IEBACiAJc3RydWN0IGlycV9ob3N0ICppcnFfaG9zdCA9IGdldF9pcnFfZGF0YShjYXNjYWRlX3ZpcnEpOwogCXVuc2lnbmVkIGludCB2aXJxOwogCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAlkZXNjLT5jaGlwLT5tYXNrKGNhc2NhZGVfdmlycSk7IC8qIElSUV9MRVZFTCAqLwotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJdmlycSA9IF9faGx3ZF9waWNfZ2V0X2lycShpcnFfaG9zdCk7CiAJaWYgKHZpcnEgIT0gTk9fSVJRKQpAQCAtMTQyLDExICsxNDIsMTEgQEAKIAllbHNlCiAJCXByX2Vycigic3B1cmlvdXMgaW50ZXJydXB0IVxuIik7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPmFjayhjYXNjYWRlX3ZpcnEpOyAvKiBJUlFfTEVWRUwgKi8KIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPnVubWFzaykKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKGNhc2NhZGVfdmlycSk7Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3VzYmdlY2tvX3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jCmluZGV4IGVkYzk1NmMuLjIwYThlZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCXdoaWxlICghdWdfaXNfdHhmaWZvX3JlYWR5KCkgJiYgY291bnQtLSkKIAkJYmFycmllcigpOwotCWlmIChjb3VudCkKKwlpZiAoY291bnQgPj0gMCkKIAkJdWdfcmF3X3B1dGMoY2gpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCmluZGV4IDBkOTM0M2QuLjY2MTc5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCkBAIC04NTUsNTkgKzg1NSw1OCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQotc3RhdGljIGludCBwcm9jX21mX2R1bXBfY21kbGluZShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfY21kbGluZV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW47Ci0JY2hhciAqcDsKKwljaGFyICpwYWdlLCAqcDsKIAlzdHJ1Y3QgdnNwX2NtZF9kYXRhIHZzcF9jbWQ7CiAJaW50IHJjOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAkvKiBUaGUgSFYgYXBwZWFycyB0byByZXR1cm4gbm8gbW9yZSB0aGFuIDI1NiBieXRlcyBvZiBjb21tYW5kIGxpbmUgKi8KLQlpZiAob2ZmID49IDI1NikKLQkJcmV0dXJuIDA7Ci0JaWYgKChvZmYgKyBjb3VudCkgPiAyNTYpCi0JCWNvdW50ID0gMjU2IC0gb2ZmOwotCi0JZG1hX2FkZHIgPSBpc2VyaWVzX2h2X21hcChwYWdlLCBvZmYgKyBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAoZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpCisJcGFnZSA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwYWdlLCAwLCBvZmYgKyBjb3VudCk7CisKKwlkbWFfYWRkciA9IGlzZXJpZXNfaHZfbWFwKHBhZ2UsIDI1NiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpIHsKKwkJa2ZyZWUocGFnZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocGFnZSwgMCwgMjU2KTsKIAltZW1zZXQoJnZzcF9jbWQsIDAsIHNpemVvZih2c3BfY21kKSk7CiAJdnNwX2NtZC5jbWQgPSAzMzsKIAl2c3BfY21kLnN1Yl9kYXRhLmtlcm4udG9rZW4gPSBkbWFfYWRkcjsKIAl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uYWRkcmVzc190eXBlID0gSHZMcERtYV9BZGRyZXNzVHlwZV9UY2VJbmRleDsKLQl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uc2lkZSA9ICh1NjQpZGF0YTsKLQl2c3BfY21kLnN1Yl9kYXRhLmtlcm4ubGVuZ3RoID0gb2ZmICsgY291bnQ7CisJdnNwX2NtZC5zdWJfZGF0YS5rZXJuLnNpZGUgPSAodTY0KW0tPnByaXZhdGU7CisJdnNwX2NtZC5zdWJfZGF0YS5rZXJuLmxlbmd0aCA9IDI1NjsKIAltYigpOwogCXJjID0gc2lnbmFsX3ZzcF9pbnN0cnVjdGlvbigmdnNwX2NtZCk7Ci0JaXNlcmllc19odl91bm1hcChkbWFfYWRkciwgb2ZmICsgY291bnQsIERNQV9GUk9NX0RFVklDRSk7Ci0JaWYgKHJjKQorCWlzZXJpZXNfaHZfdW5tYXAoZG1hX2FkZHIsIDI1NiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUocGFnZSk7CiAJCXJldHVybiByYzsKLQlpZiAodnNwX2NtZC5yZXN1bHRfY29kZSAhPSAwKQorCX0KKwlpZiAodnNwX2NtZC5yZXN1bHRfY29kZSAhPSAwKSB7CisJCWtmcmVlKHBhZ2UpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJcCA9IHBhZ2U7Ci0JbGVuID0gMDsKLQl3aGlsZSAobGVuIDwgKG9mZiArIGNvdW50KSkgewotCQlpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAnXG4nKSkgewotCQkJaWYgKCpwID09ICdcMCcpCi0JCQkJKnAgPSAnXG4nOwotCQkJcCsrOwotCQkJbGVuKys7Ci0JCQkqZW9mID0gMTsKKwl3aGlsZSAocCAtIHBhZ2UgPCAyNTYpIHsKKwkJaWYgKCpwID09ICdcMCcgfHwgKnAgPT0gJ1xuJykgeworCQkJKnAgPSAnXG4nOwogCQkJYnJlYWs7CiAJCX0KIAkJcCsrOwotCQlsZW4rKzsKLQl9CiAKLQlpZiAobGVuIDwgb2ZmKSB7Ci0JCSplb2YgPSAxOwotCQlsZW4gPSAwOwogCX0KLQlyZXR1cm4gbGVuOworCXNlcV93cml0ZShtLCBwYWdlLCBwIC0gcGFnZSk7CisJa2ZyZWUocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWZfY21kbGluZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1mX2NtZGxpbmVfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAogI2lmIDAKQEAgLTk2MiwxMCArOTYxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHByb2NfbWZfZHVtcF9zaWRlKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zaWRlX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbjsKIAljaGFyIG1mX2N1cnJlbnRfc2lkZSA9ICcgJzsKIAlzdHJ1Y3QgdnNwX2NtZF9kYXRhIHZzcF9jbWQ7CiAKQEAgLTk4OSwyMSArOTg2LDE3IEBACiAJCX0KIAl9CiAKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlY1xuIiwgbWZfY3VycmVudF9zaWRlKTsKLQotCWlmIChsZW4gPD0gKG9mZiArIGNvdW50KSkKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlsZW4gLT0gb2ZmOwotCWlmIChsZW4gPiBjb3VudCkKLQkJbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IDA7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIlY1xuIiwgbWZfY3VycmVudF9zaWRlKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX21mX2NoYW5nZV9zaWRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zaWRlX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfc2lkZV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBtZl9zaWRlX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgc2lkZTsKIAl1NjQgbmV3U2lkZTsKQEAgLTEwNDEsNiArMTAzNCwxNSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWZfc2lkZV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1mX3NpZGVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IG1mX3NpZGVfcHJvY193cml0ZSwKK307CisKICNpZiAwCiBzdGF0aWMgdm9pZCBtZl9nZXRTcmNIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCiB7CkBAIC0xMDg3LDggKzEwODksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJvY19tZl9kdW1wX3NyYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfc3JjX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAjaWYgMAogCWludCBsZW47CkBAIC0xMTA5LDggKzExMTAsMTMgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX3NyYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfc3JjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfc3JjX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1mX3NyY19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgc3RrYnVmWzEwXTsKIApAQCAtMTEzNSw5ICsxMTQxLDE5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX2NtZGxpbmUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9zcmNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtZl9zcmNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IG1mX3NyY19wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QgbWZfY21kbGluZV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKKwl2b2lkICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWNoYXIgKnBhZ2U7CkBAIC0xMTcyLDYgKzExODgsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9jbWRsaW5lX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWZfY21kbGluZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfY21kbGluZV9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHNzaXplX3QgcHJvY19tZl9jaGFuZ2Vfdm1saW51eChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMTI0NiwxMiArMTI3MSwxMCBAQAogCQlpZiAoIW1mKQogCQkJcmV0dXJuIDE7CiAKLQkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImNtZGxpbmUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWYpOworCQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKCJjbWRsaW5lIiwgU19JUlVTUnxTX0lXVVNSLCBtZiwKKwkJCQkgICAgICAgJm1mX2NtZGxpbmVfcHJvY19mb3BzLCAodm9pZCAqKShsb25nKWkpOwogCQlpZiAoIWVudCkKIAkJCXJldHVybiAxOwotCQllbnQtPmRhdGEgPSAodm9pZCAqKShsb25nKWk7Ci0JCWVudC0+cmVhZF9wcm9jID0gcHJvY19tZl9kdW1wX2NtZGxpbmU7Ci0JCWVudC0+d3JpdGVfcHJvYyA9IHByb2NfbWZfY2hhbmdlX2NtZGxpbmU7CiAKIAkJaWYgKGkgPT0gMykJLyogbm8gdm1saW51eCBlbnRyeSBmb3IgJ0QnICovCiAJCQljb250aW51ZTsKQEAgLTEyNjMsMTkgKzEyODYsMTUgQEAKIAkJCXJldHVybiAxOwogCX0KIAotCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzaWRlIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsIG1mX3Byb2Nfcm9vdCk7CisJZW50ID0gcHJvY19jcmVhdGUoInNpZGUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290LAorCQkJICAmbWZfc2lkZV9wcm9jX2ZvcHMpOwogCWlmICghZW50KQogCQlyZXR1cm4gMTsKLQllbnQtPmRhdGEgPSAodm9pZCAqKTA7Ci0JZW50LT5yZWFkX3Byb2MgPSBwcm9jX21mX2R1bXBfc2lkZTsKLQllbnQtPndyaXRlX3Byb2MgPSBwcm9jX21mX2NoYW5nZV9zaWRlOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNyYyIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QpOworCWVudCA9IHByb2NfY3JlYXRlKCJzcmMiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290LAorCQkJICAmbWZfc3JjX3Byb2NfZm9wcyk7CiAJaWYgKCFlbnQpCiAJCXJldHVybiAxOwotCWVudC0+ZGF0YSA9ICh2b2lkICopMDsKLQllbnQtPnJlYWRfcHJvYyA9IHByb2NfbWZfZHVtcF9zcmM7Ci0JZW50LT53cml0ZV9wcm9jID0gcHJvY19tZl9jaGFuZ2Vfc3JjOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwppbmRleCA0OWZmNGRjLi41YWVhOTRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCXUxNiB2bGFuTWFwOwogCWRtYV9hZGRyX3QgaGFuZGxlOwogCUh2THBFdmVudF9SYyBodnJjOwotCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAJY29uc3QgY2hhciAqc3lzaWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggMjc1NTRjOC4uYzY2N2YwZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTIsNiArMiw4IEBACiAJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJYm9vbCAiSUJNIHBTZXJpZXMgJiBuZXcgKFBPV0VSNS1iYXNlZCkgaVNlcmllcyIKIAlzZWxlY3QgTVBJQworCXNlbGVjdCBQQ0lfTVNJCisJc2VsZWN0IFhJQ1MKIAlzZWxlY3QgUFBDX0k4MjU5CiAJc2VsZWN0IFBQQ19SVEFTCiAJc2VsZWN0IFBQQ19SVEFTX0RBRU1PTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCmluZGV4IGJjZGNmMGMuLmEyNzdmMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKQEAgLTM4LDE5ICszOCwyOCBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCiAjZGVmaW5lIENNTV9EUklWRVJfVkVSU0lPTgkiMS4wLjAiCiAjZGVmaW5lIENNTV9ERUZBVUxUX0RFTEFZCTEKKyNkZWZpbmUgQ01NX0hPVFBMVUdfREVMQVkJNQogI2RlZmluZSBDTU1fREVCVUcJCQkwCiAjZGVmaW5lIENNTV9ESVNBQkxFCQkwCiAjZGVmaW5lIENNTV9PT01fS0IJCTEwMjQKICNkZWZpbmUgQ01NX01JTl9NRU1fTUIJCTI1NgogI2RlZmluZSBLQjJQQUdFUyhfcCkJCSgoX3ApPj4oUEFHRV9TSElGVC0xMCkpCiAjZGVmaW5lIFBBR0VTMktCKF9wKQkJKChfcCk8PChQQUdFX1NISUZULTEwKSkKKy8qCisgKiBUaGUgcHJpb3JpdHkgbGV2ZWwgdHJpZXMgdG8gZW5zdXJlIHRoYXQgdGhpcyBub3RpZmllciBpcyBjYWxsZWQgYXMKKyAqIGxhdGUgYXMgcG9zc2libGUgdG8gcmVkdWNlIHRocmFzaGluZyBpbiB0aGUgc2hhcmVkIG1lbW9yeSBwb29sLgorICovCisjZGVmaW5lIENNTV9NRU1fSE9UUExVR19QUkkJMQorI2RlZmluZSBDTU1fTUVNX0lTT0xBVEVfUFJJCTE1CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXkgPSBDTU1fREVGQVVMVF9ERUxBWTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaG90cGx1Z19kZWxheSA9IENNTV9IT1RQTFVHX0RFTEFZOwogc3RhdGljIHVuc2lnbmVkIGludCBvb21fa2IgPSBDTU1fT09NX0tCOwogc3RhdGljIHVuc2lnbmVkIGludCBjbW1fZGVidWcgPSBDTU1fREVCVUc7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNtbV9kaXNhYmxlZCA9IENNTV9ESVNBQkxFOwpAQCAtNjUsNiArNzQsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWxheSwgZGVsYXksIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVsYXksICJEZWxheSAoaW4gc2Vjb25kcykgYmV0d2VlbiBwb2xscyB0byBxdWVyeSBoeXBlcnZpc29yIHBhZ2luZyByZXF1ZXN0cy4gIgogCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX0RFRkFVTFRfREVMQVkpICJdIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoaG90cGx1Z19kZWxheSwgaG90cGx1Z19kZWxheSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgIkRlbGF5IChpbiBzZWNvbmRzKSBhZnRlciBtZW1vcnkgaG90cGx1ZyByZW1vdmUgIgorCQkgImJlZm9yZSBsb2FuaW5nIHJlc3VtZXMuICIKKwkJICJbRGVmYXVsdD0iIF9fc3RyaW5naWZ5KENNTV9IT1RQTFVHX0RFTEFZKSAiXSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG9vbV9rYiwgb29tX2tiLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG9vbV9rYiwgIkFtb3VudCBvZiBtZW1vcnkgaW4ga2IgdG8gZnJlZSBvbiBPT00uICIKIAkJICJbRGVmYXVsdD0iIF9fc3RyaW5naWZ5KENNTV9PT01fS0IpICJdIik7CkBAIC05Miw2ICsxMDUsOSBAQAogc3RhdGljIHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqY21tX3BhZ2VfbGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21tX2xvY2spOwogCitzdGF0aWMgREVGSU5FX01VVEVYKGhvdHBsdWdfbXV0ZXgpOworc3RhdGljIGludCBob3RwbHVnX29jY3VycmVkOyAvKiBwcm90ZWN0ZWQgYnkgdGhlIGhvdHBsdWcgbXV0ZXggKi8KKwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY21tX3RocmVhZF9wdHI7CiAKIC8qKgpAQCAtMTEwLDYgKzEyNiwxNyBAQAogCWNtbV9kYmcoIkJlZ2luIHJlcXVlc3QgZm9yICVsZCBwYWdlc1xuIiwgbnIpOwogCiAJd2hpbGUgKG5yKSB7CisJCS8qIEV4aXQgaWYgYSBob3RwbHVnIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBvciBvY2N1cnJlZCAqLworCQlpZiAobXV0ZXhfdHJ5bG9jaygmaG90cGx1Z19tdXRleCkpIHsKKwkJCWlmIChob3RwbHVnX29jY3VycmVkKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmaG90cGx1Z19tdXRleCk7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCiAJCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAogCQkJCSAgICAgICBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CiAJCWlmICghYWRkcikKQEAgLTExOSw4ICsxNDYsOSBAQAogCQlpZiAoIXBhIHx8IHBhLT5pbmRleCA+PSBDTU1fTlJfUEFHRVMpIHsKIAkJCS8qIE5lZWQgYSBuZXcgcGFnZSBmb3IgdGhlIHBhZ2UgbGlzdC4gKi8KIAkJCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7Ci0JCQlucGEgPSAoc3RydWN0IGNtbV9wYWdlX2FycmF5ICopX19nZXRfZnJlZV9wYWdlKEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHwKLQkJCQkJCQkJICAgICAgIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKKwkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoCisJCQkJCUdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHwKKwkJCQkJX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOwogCQkJaWYgKCFucGEpIHsKIAkJCQlwcl9pbmZvKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBuZXcgcGFnZSBsaXN0XG4iLCBfX2Z1bmNfXyk7CiAJCQkJZnJlZV9wYWdlKGFkZHIpOwpAQCAtMjgyLDkgKzMxMCwyOCBAQAogCXdoaWxlICgxKSB7CiAJCXRpbWVsZWZ0ID0gbXNsZWVwX2ludGVycnVwdGlibGUoZGVsYXkgKiAxMDAwKTsKIAotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHRpbWVsZWZ0KSB7Ci0JCQlsb2FuZWRfcGFnZXNfdGFyZ2V0ID0gbG9hbmVkX3BhZ2VzOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHRpbWVsZWZ0KQogCQkJYnJlYWs7CisKKwkJaWYgKG11dGV4X3RyeWxvY2soJmhvdHBsdWdfbXV0ZXgpKSB7CisJCQlpZiAoaG90cGx1Z19vY2N1cnJlZCkgeworCQkJCWhvdHBsdWdfb2NjdXJyZWQgPSAwOworCQkJCW11dGV4X3VubG9jaygmaG90cGx1Z19tdXRleCk7CisJCQkJY21tX2RiZygiSG90cGx1ZyBvcGVyYXRpb24gaGFzIG9jY3VycmVkLCAiCisJCQkJCQkibG9hbmluZyBhY3Rpdml0eSBzdXNwZW5kZWQgIgorCQkJCQkJImZvciAlZCBzZWNvbmRzLlxuIiwKKwkJCQkJCWhvdHBsdWdfZGVsYXkpOworCQkJCXRpbWVsZWZ0ID0gbXNsZWVwX2ludGVycnVwdGlibGUoaG90cGx1Z19kZWxheSAqCisJCQkJCQkxMDAwKTsKKwkJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHRpbWVsZWZ0KQorCQkJCQlicmVhazsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmaG90cGx1Z19tdXRleCk7CisJCX0gZWxzZSB7CisJCQljbW1fZGJnKCJIb3RwbHVnIG9wZXJhdGlvbiBpbiBwcm9ncmVzcywgYWN0aXZpdHkgIgorCQkJCQkic3VzcGVuZGVkXG4iKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJY21tX2dldF9tcHAoKTsKQEAgLTQxNCw2ICs0NjEsMTkzIEBACiB9OwogCiAvKioKKyAqIGNtbV9jb3VudF9wYWdlcyAtIENvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgbG9hbmVkIGluIGEgcGFydGljdWxhciByYW5nZS4KKyAqCisgKiBAYXJnOiBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgc3RydWN0dXJlIHdpdGggYWRkcmVzcyByYW5nZSBhbmQgY291bnQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgICAgIDAgb24gc3VjY2VzcworICoqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY21tX2NvdW50X3BhZ2VzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5ICptYXJnID0gYXJnOworCXN0cnVjdCBjbW1fcGFnZV9hcnJheSAqcGE7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihtYXJnLT5zdGFydF9wZm4pOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAobWFyZy0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJdW5zaWduZWQgbG9uZyBpZHg7CisKKwlzcGluX2xvY2soJmNtbV9sb2NrKTsKKwlwYSA9IGNtbV9wYWdlX2xpc3Q7CisJd2hpbGUgKHBhKSB7CisJCWlmICgodW5zaWduZWQgbG9uZylwYSA+PSBzdGFydCAmJiAodW5zaWduZWQgbG9uZylwYSA8IGVuZCkKKwkJCW1hcmctPnBhZ2VzX2ZvdW5kKys7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgcGEtPmluZGV4OyBpZHgrKykKKwkJCWlmIChwYS0+cGFnZVtpZHhdID49IHN0YXJ0ICYmIHBhLT5wYWdlW2lkeF0gPCBlbmQpCisJCQkJbWFyZy0+cGFnZXNfZm91bmQrKzsKKwkJcGEgPSBwYS0+bmV4dDsKKwl9CisJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbW1fbWVtb3J5X2lzb2xhdGVfY2IgLSBIYW5kbGUgbWVtb3J5IGlzb2xhdGlvbiBub3RpZmllciBjYWxscworICogQHNlbGY6CW5vdGlmaWVyIGJsb2NrIHN0cnVjdAorICogQGFjdGlvbjoJYWN0aW9uIHRvIHRha2UKKyAqIEBhcmc6CXN0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgZGF0YSBmb3IgaGFuZGxlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCU5PVElGWV9PSyBvciBub3RpZmllciBlcnJvciBiYXNlZCBvbiBzdWJmdW5jdGlvbiByZXR1cm4gdmFsdWUKKyAqKi8KK3N0YXRpYyBpbnQgY21tX21lbW9yeV9pc29sYXRlX2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChhY3Rpb24gPT0gTUVNX0lTT0xBVEVfQ09VTlQpCisJCXJldCA9IGNtbV9jb3VudF9wYWdlcyhhcmcpOworCisJaWYgKHJldCkKKwkJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCWVsc2UKKwkJcmV0ID0gTk9USUZZX09LOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbW1fbWVtX2lzb2xhdGVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjbW1fbWVtb3J5X2lzb2xhdGVfY2IsCisJLnByaW9yaXR5ID0gQ01NX01FTV9JU09MQVRFX1BSSQorfTsKKworLyoqCisgKiBjbW1fbWVtX2dvaW5nX29mZmxpbmUgLSBVbmxvYW4gcGFnZXMgd2hlcmUgbWVtb3J5IGlzIHRvIGJlIHJlbW92ZWQKKyAqIEBhcmc6IG1lbW9yeV9ub3RpZnkgc3RydWN0dXJlIHdpdGggcGFnZSByYW5nZSB0byBiZSBvZmZsaW5lZAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCTAgb24gc3VjY2VzcworICoqLworc3RhdGljIGludCBjbW1fbWVtX2dvaW5nX29mZmxpbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBtZW1vcnlfbm90aWZ5ICptYXJnID0gYXJnOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSA9ICh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihtYXJnLT5zdGFydF9wZm4pOworCXVuc2lnbmVkIGxvbmcgZW5kX3BhZ2UgPSBzdGFydF9wYWdlICsgKG1hcmctPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCXN0cnVjdCBjbW1fcGFnZV9hcnJheSAqcGFfY3VyciwgKnBhX2xhc3QsICpucGE7CisJdW5zaWduZWQgbG9uZyBpZHg7CisJdW5zaWduZWQgbG9uZyBmcmVlZCA9IDA7CisKKwljbW1fZGJnKCJNZW1vcnkgZ29pbmcgb2ZmbGluZSwgc2VhcmNoaW5nIDB4JWx4ICglbGQgcGFnZXMpLlxuIiwKKwkJCXN0YXJ0X3BhZ2UsIG1hcmctPm5yX3BhZ2VzKTsKKwlzcGluX2xvY2soJmNtbV9sb2NrKTsKKworCS8qIFNlYXJjaCB0aGUgcGFnZSBsaXN0IGZvciBwYWdlcyBpbiB0aGUgcmFuZ2UgdG8gYmUgb2ZmbGluZWQgKi8KKwlwYV9sYXN0ID0gcGFfY3VyciA9IGNtbV9wYWdlX2xpc3Q7CisJd2hpbGUgKHBhX2N1cnIpIHsKKwkJZm9yIChpZHggPSAocGFfY3Vyci0+aW5kZXggLSAxKTsgKGlkeCArIDEpID4gMDsgaWR4LS0pIHsKKwkJCWlmICgocGFfY3Vyci0+cGFnZVtpZHhdIDwgc3RhcnRfcGFnZSkgfHwKKwkJCSAgICAocGFfY3Vyci0+cGFnZVtpZHhdID49IGVuZF9wYWdlKSkKKwkJCQljb250aW51ZTsKKworCQkJcGxwYXJfcGFnZV9zZXRfYWN0aXZlKF9fcGEocGFfY3Vyci0+cGFnZVtpZHhdKSk7CisJCQlmcmVlX3BhZ2UocGFfY3Vyci0+cGFnZVtpZHhdKTsKKwkJCWZyZWVkKys7CisJCQlsb2FuZWRfcGFnZXMtLTsKKwkJCXRvdGFscmFtX3BhZ2VzKys7CisJCQlwYV9jdXJyLT5wYWdlW2lkeF0gPSBwYV9sYXN0LT5wYWdlWy0tcGFfbGFzdC0+aW5kZXhdOworCQkJaWYgKHBhX2xhc3QtPmluZGV4ID09IDApIHsKKwkJCQlpZiAocGFfY3VyciA9PSBwYV9sYXN0KQorCQkJCQlwYV9jdXJyID0gcGFfbGFzdC0+bmV4dDsKKwkJCQlwYV9sYXN0ID0gcGFfbGFzdC0+bmV4dDsKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY21tX3BhZ2VfbGlzdCk7CisJCQkJY21tX3BhZ2VfbGlzdCA9IHBhX2xhc3Q7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJcGFfY3VyciA9IHBhX2N1cnItPm5leHQ7CisJfQorCisJLyogU2VhcmNoIGZvciBwYWdlIGxpc3Qgc3RydWN0dXJlcyBpbiB0aGUgcmFuZ2UgdG8gYmUgb2ZmbGluZWQgKi8KKwlwYV9sYXN0ID0gTlVMTDsKKwlwYV9jdXJyID0gY21tX3BhZ2VfbGlzdDsKKwl3aGlsZSAocGFfY3VycikgeworCQlpZiAoKCh1bnNpZ25lZCBsb25nKXBhX2N1cnIgPj0gc3RhcnRfcGFnZSkgJiYKKwkJCQkoKHVuc2lnbmVkIGxvbmcpcGFfY3VyciA8IGVuZF9wYWdlKSkgeworCQkJbnBhID0gKHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKV9fZ2V0X2ZyZWVfcGFnZSgKKwkJCQkJR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAorCQkJCQlfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CisJCQlpZiAoIW5wYSkgeworCQkJCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CisJCQkJY21tX2RiZygiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbGlzdCAiCisJCQkJCQkibWFuYWdlbWVudC4gTWVtb3J5IGhvdHBsdWcgIgorCQkJCQkJImZhaWxlZC5cbiIpOworCQkJCXJldHVybiBFTk9NRU07CisJCQl9CisJCQltZW1jcHkobnBhLCBwYV9jdXJyLCBQQUdFX1NJWkUpOworCQkJaWYgKHBhX2N1cnIgPT0gY21tX3BhZ2VfbGlzdCkKKwkJCQljbW1fcGFnZV9saXN0ID0gbnBhOworCQkJaWYgKHBhX2xhc3QpCisJCQkJcGFfbGFzdC0+bmV4dCA9IG5wYTsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFfY3Vycik7CisJCQlmcmVlZCsrOworCQkJcGFfY3VyciA9IG5wYTsKKwkJfQorCisJCXBhX2xhc3QgPSBwYV9jdXJyOworCQlwYV9jdXJyID0gcGFfY3Vyci0+bmV4dDsKKwl9CisKKwlzcGluX3VubG9jaygmY21tX2xvY2spOworCWNtbV9kYmcoIlJlbGVhc2VkICVsZCBwYWdlcyBpbiB0aGUgc2VhcmNoIHJhbmdlLlxuIiwgZnJlZWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY21tX21lbW9yeV9jYiAtIEhhbmRsZSBtZW1vcnkgaG90cGx1ZyBub3RpZmllciBjYWxscworICogQHNlbGY6CW5vdGlmaWVyIGJsb2NrIHN0cnVjdAorICogQGFjdGlvbjoJYWN0aW9uIHRvIHRha2UKKyAqIEBhcmc6CXN0cnVjdCBtZW1vcnlfbm90aWZ5IGRhdGEgZm9yIGhhbmRsZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKglOT1RJRllfT0sgb3Igbm90aWZpZXIgZXJyb3IgYmFzZWQgb24gc3ViZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisgKgorICoqLworc3RhdGljIGludCBjbW1fbWVtb3J5X2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6CisJCW11dGV4X2xvY2soJmhvdHBsdWdfbXV0ZXgpOworCQlob3RwbHVnX29jY3VycmVkID0gMTsKKwkJcmV0ID0gY21tX21lbV9nb2luZ19vZmZsaW5lKGFyZyk7CisJCWJyZWFrOworCWNhc2UgTUVNX09GRkxJTkU6CisJY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6CisJCW11dGV4X3VubG9jaygmaG90cGx1Z19tdXRleCk7CisJCWNtbV9kYmcoIk1lbW9yeSBvZmZsaW5lIG9wZXJhdGlvbiBjb21wbGV0ZS5cbiIpOworCQlicmVhazsKKwljYXNlIE1FTV9HT0lOR19PTkxJTkU6CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKKwllbHNlCisJCXJldCA9IE5PVElGWV9PSzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY21tX21lbV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNtbV9tZW1vcnlfY2IsCisJLnByaW9yaXR5ID0gQ01NX01FTV9IT1RQTFVHX1BSSQorfTsKKworLyoqCiAgKiBjbW1faW5pdCAtIE1vZHVsZSBpbml0aWFsaXphdGlvbgogICoKICAqIFJldHVybiB2YWx1ZToKQEAgLTQzNSwxOCArNjY5LDI0IEBACiAJaWYgKChyYyA9IGNtbV9zeXNmc19yZWdpc3RlcigmY21tX3N5c2RldikpKQogCQlnb3RvIG91dF9yZWJvb3Rfbm90aWZpZXI7CiAKKwlpZiAocmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZjbW1fbWVtX25iKSB8fAorCSAgICByZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcigmY21tX21lbV9pc29sYXRlX25iKSkKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9ub3RpZmllcjsKKwogCWlmIChjbW1fZGlzYWJsZWQpCiAJCXJldHVybiByYzsKIAogCWNtbV90aHJlYWRfcHRyID0ga3RocmVhZF9ydW4oY21tX3RocmVhZCwgTlVMTCwgImNtbXRocmVhZCIpOwogCWlmIChJU19FUlIoY21tX3RocmVhZF9wdHIpKSB7CiAJCXJjID0gUFRSX0VSUihjbW1fdGhyZWFkX3B0cik7Ci0JCWdvdG8gb3V0X3VucmVnaXN0ZXJfc3lzZnM7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfbm90aWZpZXI7CiAJfQogCiAJcmV0dXJuIHJjOwogCi1vdXRfdW5yZWdpc3Rlcl9zeXNmczoKK291dF91bnJlZ2lzdGVyX25vdGlmaWVyOgorCXVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZjbW1fbWVtX25iKTsKKwl1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKCZjbW1fbWVtX2lzb2xhdGVfbmIpOwogCWNtbV91bnJlZ2lzdGVyX3N5c2ZzKCZjbW1fc3lzZGV2KTsKIG91dF9yZWJvb3Rfbm90aWZpZXI6CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmNtbV9yZWJvb3RfbmIpOwpAQCAtNDY3LDYgKzcwNyw4IEBACiAJCWt0aHJlYWRfc3RvcChjbW1fdGhyZWFkX3B0cik7CiAJdW5yZWdpc3Rlcl9vb21fbm90aWZpZXIoJmNtbV9vb21fbmIpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZjbW1fcmVib290X25iKTsKKwl1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigmY21tX21lbV9uYik7CisJdW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcigmY21tX21lbV9pc29sYXRlX25iKTsKIAljbW1fZnJlZV9wYWdlcyhsb2FuZWRfcGFnZXMpOwogCWNtbV91bnJlZ2lzdGVyX3N5c2ZzKCZjbW1fc3lzZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKaW5kZXggMTJkZjllOC4uNjdiN2ExMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKQEAgLTM0NiwxMiArMzQ2LDE0IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgocHNlcmllc19jcHVfaG90cGx1Z19tdXRleCk7CiAKLXZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX2xvY2soKQordm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfbG9jayh2b2lkKQorX19hY3F1aXJlcyhwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KQogewogCW11dGV4X2xvY2soJnBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpOwogfQogCi12b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2soKQordm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfdW5sb2NrKHZvaWQpCitfX3JlbGVhc2VzKHBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpCiB7CiAJbXV0ZXhfdW5sb2NrKCZwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA4ODY4YzAxLi5iNDg4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC0xNDQsOCArMTQ0LDggQEAKIAkJaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChucik7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCwgaGNwdWlkKTsKIAkJaWYgKHJjICE9IEhfU1VDQ0VTUykKLQkJCXBhbmljKCJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZCBSZXQ9ICVsZFxuIiwKLQkJCQluciwgcmMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKKwkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDk3MTQ4M2YuLjE3MDlhYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTE0MywxMyArMTQzLDIzIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAJdW5zaWduZWQgaW50IHZvbGQsIHZuZXcsIGVkaWJpdDsKIAotCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKLQkJZmxvd190eXBlID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCS8qIFBvcnQgQyBpbnRlcnJ1cHRzIGFyZSBlaXRoZXIgSVJRX1RZUEVfRURHRV9GQUxMSU5HIG9yCisJICogSVJRX1RZUEVfRURHRV9CT1RIIChkZWZhdWx0KS4gIEFsbCBvdGhlcnMgYXJlIElSUV9UWVBFX0VER0VfRkFMTElORworCSAqIG9yIElSUV9UWVBFX0xFVkVMX0xPVyAoZGVmYXVsdCkKKwkgKi8KKwlpZiAoc3JjID49IENQTTJfSVJRX1BPUlRDMTUgJiYgc3JjIDw9IENQTTJfSVJRX1BPUlRDMCkgeworCQlpZiAoZmxvd190eXBlID09IElSUV9UWVBFX05PTkUpCisJCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9FREdFX0JPVEg7CiAKLQlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDUE0yIFBJQzogc2Vuc2UgdHlwZSAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQlmbG93X3R5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGZsb3dfdHlwZSAhPSBJUlFfVFlQRV9FREdFX0JPVEggJiYKKwkJICAgIGZsb3dfdHlwZSAhPSBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCQlnb3RvIGVycl9zZW5zZTsKKwl9IGVsc2UgeworCQlpZiAoZmxvd190eXBlID09IElSUV9UWVBFX05PTkUpCisJCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisKKwkJaWYgKGZsb3dfdHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKQorCQkJZ290byBlcnJfc2Vuc2U7CiAJfQogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7CkBAIC0xODEsNiArMTkxLDEwIEBACiAJaWYgKHZvbGQgIT0gdm5ldykKIAkJb3V0X2JlMzIoJmNwbTJfaW50Y3RsLT5pY19zaWV4ciwgdm5ldyk7CiAJcmV0dXJuIDA7CisKK2Vycl9zZW5zZToKKwlwcl9lcnIoIkNQTTIgUElDOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwgZmxvd190eXBlKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcG0yX3BpYyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggNGUzYTNlMy4uZTFhMDI4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTQ2NCw4ICs0NjQsNyBAQAogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXN0cnVjdCBtcGM4M3h4X3BjaWVfcHJpdiAqcGNpZSA9IGhvc2UtPmRuLT5kYXRhOwotCXU4IGJ1c19ubyA9IGJ1cy0+bnVtYmVyIC0gaG9zZS0+Zmlyc3RfYnVzbm87Ci0JdTMyIGRldl9iYXNlID0gYnVzX25vIDw8IDI0IHwgZGV2Zm4gPDwgMTY7CisJdTMyIGRldl9iYXNlID0gYnVzLT5udW1iZXIgPDwgMjQgfCBkZXZmbiA8PCAxNjsKIAlpbnQgcmV0OwogCiAJcmV0ID0gbXBjODN4eF9wY2llX2V4Y2x1ZGVfZGV2aWNlKGJ1cywgZGV2Zm4pOwpAQCAtNTE1LDEyICs1MTQsMTcgQEAKIHN0YXRpYyBpbnQgbXBjODN4eF9wY2llX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJCQkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKQogeworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXZvaWQgX19pb21lbSAqY2ZnX2FkZHI7CiAKIAljZmdfYWRkciA9IG1wYzgzeHhfcGNpZV9yZW1hcF9jZmcoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKIAlpZiAoIWNmZ19hZGRyKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCisJLyogUFBDX0lORElSRUNUX1RZUEVfU1VSUFJFU1NfUFJJTUFSWV9CVVMgKi8KKwlpZiAob2Zmc2V0ID09IFBDSV9QUklNQVJZX0JVUyAmJiBidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubykKKwkJdmFsICY9IDB4ZmZmZmZmMDA7CisKIAlzd2l0Y2ggKGxlbikgewogCWNhc2UgMToKIAkJb3V0XzgoY2ZnX2FkZHIsIHZhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwppbmRleCAxMDNlYWNlLi5lZTFjMGUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKQEAgLTU0LDYgKzU0LDIyIEBACiAJbXBjOHh4eF9nYy0+ZGF0YSA9IGluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCk7CiB9CiAKKy8qIFdvcmthcm91bmQgR1BJTyAxIGVycmF0YSBvbiBNUEM4NTcyL01QQzg1MzYuIFRoZSBzdGF0dXMgb2YgR1BJT3MKKyAqIGRlZmluZWQgYXMgb3V0cHV0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgR1BEQVQgcmVnaXN0ZXIsCisgKiBzbyB3ZSB1c2Ugc2hhZG93IGRhdGEgcmVnaXN0ZXIgaW5zdGVhZC4gVGhlIHN0YXR1cyBvZiBpbnB1dCBwaW5zCisgKiBpcyBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgR1BEQVQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXBjODU3Ml9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJdTMyIHZhbDsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gdG9fbXBjOHh4eF9ncGlvX2NoaXAobW0pOworCisJdmFsID0gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKSAmIH5pbl9iZTMyKG1tLT5yZWdzICsgR1BJT19ESVIpOworCisJcmV0dXJuICh2YWwgfCBtcGM4eHh4X2djLT5kYXRhKSAmIG1wYzh4eHhfZ3BpbzJtYXNrKGdwaW8pOworfQorCiBzdGF0aWMgaW50IG1wYzh4eHhfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKQEAgLTEzNiw3ICsxNTIsMTAgQEAKIAlnYy0+bmdwaW8gPSBNUEM4WFhYX0dQSU9fUElOUzsKIAlnYy0+ZGlyZWN0aW9uX2lucHV0ID0gbXBjOHh4eF9ncGlvX2Rpcl9pbjsKIAlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IG1wYzh4eHhfZ3Bpb19kaXJfb3V0OwotCWdjLT5nZXQgPSBtcGM4eHh4X2dwaW9fZ2V0OworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxtcGM4NTcyLWdwaW8iKSkKKwkJZ2MtPmdldCA9IG1wYzg1NzJfZ3Bpb19nZXQ7CisJZWxzZQorCQlnYy0+Z2V0ID0gbXBjOHh4eF9ncGlvX2dldDsKIAlnYy0+c2V0ID0gbXBjOHh4eF9ncGlvX3NldDsKIAogCXJldCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgbW1fZ2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCBhYTlkMDZlLi40NzBkYzZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTU2NywxMyArNTY3LDExIEBACiAjZW5kaWYgLyogQ09ORklHX01QSUNfVTNfSFRfSVJRUyAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBpcnFfY2hvb3NlX2NwdSh1bnNpZ25lZCBpbnQgdmlydF9pcnEpCitzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KGNvbnN0IGNwdW1hc2tfdCAqbWFzaykKIHsKLQljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1aWQ7CiAKLQljcHVtYXNrX2NvcHkoJm1hc2ssIGlycV90b19kZXNjKHZpcnRfaXJxKS0+YWZmaW5pdHkpOwotCWlmIChjcHVzX2VxdWFsKG1hc2ssIENQVV9NQVNLX0FMTCkpIHsKKwlpZiAoY3B1bWFza19lcXVhbChtYXNrLCBjcHVfYWxsX21hc2spKSB7CiAJCXN0YXRpYyBpbnQgaXJxX3JvdmVyOwogCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9yb3Zlcl9sb2NrKTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU5NCwyMCArNTkyLDE1IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewotCQljcHVtYXNrX3QgdG1wOwotCi0JCWNwdXNfYW5kKHRtcCwgY3B1X29ubGluZV9tYXAsIG1hc2spOwotCi0JCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCWNwdWlkID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwkJaWYgKGNwdWlkID49IG5yX2NwdV9pZHMpCiAJCQlnb3RvIGRvX3JvdW5kX3JvYmluOwotCi0JCWNwdWlkID0gZmlyc3RfY3B1KHRtcCk7CiAJfQogCiAJcmV0dXJuIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1aWQpOwogfQogI2Vsc2UKLXN0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUodW5zaWduZWQgaW50IHZpcnRfaXJxKQorc3RhdGljIGludCBpcnFfY2hvb3NlX2NwdShjb25zdCBjcHVtYXNrX3QgKm1hc2spCiB7CiAJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogfQpAQCAtODE2LDcgKzgwOSw3IEBACiAJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CiAKIAlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1NJTkdMRV9ERVNUX0NQVSkgewotCQlpbnQgY3B1aWQgPSBpcnFfY2hvb3NlX2NwdShpcnEpOworCQlpbnQgY3B1aWQgPSBpcnFfY2hvb3NlX2NwdShjcHVtYXNrKTsKIAogCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSU5GTyhJUlFfREVTVElOQVRJT04pLCAxIDw8IGNwdWlkKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCmluZGV4IDFkNDRlZWUuLjBmNjdjZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKQEAgLTM5LDcgKzM5LDEyIEBACiAKIAlwcl9kZWJ1ZygibXBpYzogZm91bmQgVTMsIGd1ZXNzaW5nIG1zaSBhbGxvY2F0b3Igc2V0dXBcbiIpOwogCi0JLyogUmVzZXJ2ZSBzb3VyY2UgbnVtYmVycyB3ZSBrbm93IGFyZSByZXNlcnZlZCBpbiB0aGUgSFcgKi8KKwkvKiBSZXNlcnZlIHNvdXJjZSBudW1iZXJzIHdlIGtub3cgYXJlIHJlc2VydmVkIGluIHRoZSBIVy4KKwkgKgorCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBtaXggb2YgVTMgYW5kIFU0IHJlc2VydmVzIGJ1dCB0aGF0J3MgZ29pbmcKKwkgKiB0byB3b3JrIGZpbmUsIHdlIGhhdmUgcGxlbnR5IGVudWdoIG51bWJlcnMgbGVmdCBzbyBsZXQncyBqdXN0CisJICogbWFyayBhbnl0aGluZyB3ZSBkb24ndCBsaWtlIHJlc2VydmVkLgorCSAqLwogCWZvciAoaSA9IDA7ICAgaSA8IDg7ICAgaSsrKQogCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOwogCkBAIC00OSw2ICs1NCwxMCBAQAogCWZvciAoaSA9IDEwMDsgaSA8IDEwNTsgaSsrKQogCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOwogCisJZm9yIChpID0gMTI0OyBpIDwgbXBpYy0+aXJxX2NvdW50OyBpKyspCisJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CisKKwogCW5wID0gTlVMTDsKIAl3aGlsZSAoKG5wID0gb2ZfZmluZF9hbGxfbm9kZXMobnApKSkgewogCQlwcl9kZWJ1ZygibXBpYzogbWFwcGluZyBod2lycXMgZm9yICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKaW5kZXggZDNjYWYyMy4uYmNiZmU3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKQEAgLTY0LDEyICs2NCwxMiBAQAogCXJldHVybiBhZGRyOwogfQogCi1zdGF0aWMgdTY0IGZpbmRfaHRfbWFnaWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB1NjQgZmluZF9odF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaHdpcnEpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKIAl1bnNpZ25lZCBpbnQgcG9zOwogCi0JZm9yIChidXMgPSBwZGV2LT5idXM7IGJ1czsgYnVzID0gYnVzLT5wYXJlbnQpIHsKKwlmb3IgKGJ1cyA9IHBkZXYtPmJ1czsgYnVzICYmIGJ1cy0+c2VsZjsgYnVzID0gYnVzLT5wYXJlbnQpIHsKIAkJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShidXMtPnNlbGYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOwogCQlpZiAocG9zKQogCQkJcmV0dXJuIHJlYWRfaHRfbWFnaWNfYWRkcihidXMtPnNlbGYsIHBvcyk7CkBAIC03OCwxMyArNzgsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBmaW5kX3U0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBod2lycSkKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QocGRldi0+YnVzKTsKKworCS8qIFU0IFBDSWUgTVNJcyBuZWVkIHRvIHdyaXRlIHRvIHRoZSBzcGVjaWFsIHJlZ2lzdGVyIGluCisJICogdGhlIGJyaWRnZSB0aGF0IGdlbmVyYXRlcyBpbnRlcnJ1cHRzLiBUaGVyZSBzaG91bGQgYmUKKwkgKiB0aGVvcmljYWxseSBhIHJlZ2lzdGVyIGF0IDB4ZjgwMDUwMDAgd2hlcmUgeW91IGp1c3Qgd3JpdGUKKwkgKiB0aGUgTVNJIG51bWJlciBhbmQgdGhhdCB0cmlnZ2VycyB0aGUgcmlnaHQgaW50ZXJydXB0LCBidXQKKwkgKiB1bmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGJ1c3RlZCBpbiBIVywgdGhlIGJyaWRnZSBlbmRpYW4gc3dhcHMKKwkgKiB0aGUgdmFsdWUgYW5kIGhpdHMgdGhlIHdyb25nIG5pYmJsZSBpbiB0aGUgcmVnaXN0ZXIuCisJICoKKwkgKiBTbyBpbnN0ZWFkIHdlIHVzZSBhbm90aGVyIHJlZ2lzdGVyIHNldCB3aGljaCBpcyB1c2VkIG5vcm1hbGx5CisJICogZm9yIGNvbnZlcnRpbmcgSFQgaW50ZXJydXB0cyB0byBNUElDIGludGVycnVwdHMsIHdoaWNoIGRlY29kZXMKKwkgKiB0aGUgaW50ZXJydXB0IG51bWJlciBhcyBwYXJ0IG9mIHRoZSBsb3cgYWRkcmVzcyBiaXRzCisJICoKKwkgKiBUaGlzIHdpbGwgbm90IHdvcmsgaWYgd2UgZXZlciB1c2UgbW9yZSB0aGFuIG9uZSBsZWdhY3kgTVNJIGluCisJICogYSBibG9jayBidXQgd2UgbmV2ZXIgZG8uIEZvciBvbmUgTVNJIG9yIG11bHRpcGxlIE1TSS1YIHdoZXJlCisJICogZWFjaCBpbnRlcnJ1cHQgYWRkcmVzcyBjYW4gYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHksIGl0IHdvcmtzCisJICoganVzdCBmaW5lLgorCSAqLworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShob3NlLT5kbiwgInU0LXBjaWUiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShob3NlLT5kbiwgIlU0LXBjaWUiKSkKKwkJcmV0dXJuIDB4ZjgwMDQwMDAgfCAoaHdpcnEgPDwgNCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB1M21zaV9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7CiAJaWYgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKQogCQlwcl9kZWJ1ZygidTNtc2k6IE1TSS1YIHVudGVzdGVkLCB0cnlpbmcgYW55d2F5LlxuIik7CiAKIAkvKiBJZiB3ZSBjYW4ndCBmaW5kIGEgbWFnaWMgYWRkcmVzcyB0aGVuIE1TSSBhaW4ndCBnb25uYSB3b3JrICovCi0JaWYgKGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2KSA9PSAwKSB7CisJaWYgKGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2LCAwKSA9PSAwICYmCisJICAgIGZpbmRfdTRfbWFnaWNfYWRkcihwZGV2LCAwKSA9PSAwKSB7CiAJCXByX2RlYnVnKCJ1M21zaTogbm8gbWFnaWMgYWRkcmVzcyBmb3VuZCBmb3IgJXNcbiIsCiAJCQkgcGNpX25hbWUocGRldikpOwogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTE4LDEwICsxNDYsNiBAQAogCXU2NCBhZGRyOwogCWludCBod2lycTsKIAotCWFkZHIgPSBmaW5kX2h0X21hZ2ljX2FkZHIocGRldik7Ci0JbXNnLmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKLQltc2cuYWRkcmVzc19oaSA9IGFkZHIgPj4gMzI7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaHdpcnEgPSBtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsIDEpOwogCQlpZiAoaHdpcnEgPCAwKSB7CkBAIC0xMjksNiArMTUzLDEyIEBACiAJCQlyZXR1cm4gaHdpcnE7CiAJCX0KIAorCQlhZGRyID0gZmluZF9odF9tYWdpY19hZGRyKHBkZXYsIGh3aXJxKTsKKwkJaWYgKGFkZHIgPT0gMCkKKwkJCWFkZHIgPSBmaW5kX3U0X21hZ2ljX2FkZHIocGRldiwgaHdpcnEpOworCQltc2cuYWRkcmVzc19sbyA9IGFkZHIgJiAweEZGRkZGRkZGOworCQltc2cuYWRkcmVzc19oaSA9IGFkZHIgPj4gMzI7CisKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfbXBpYy0+aXJxaG9zdCwgaHdpcnEpOwogCQlpZiAodmlycSA9PSBOT19JUlEpIHsKIAkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHgleFxuIiwgaHdpcnEpOwpAQCAtMTQzLDYgKzE3Myw4IEBACiAJCXByX2RlYnVnKCJ1M21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHgleCkgYWRkciAweCVseFxuIiwKIAkJCSAgdmlycSwgaHdpcnEsICh1bnNpZ25lZCBsb25nKWFkZHIpOwogCisJCXByaW50aygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpIGFkZHIgMHglbHhcbiIsCisJCQkgIHZpcnEsIGh3aXJxLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAkJbXNnLmRhdGEgPSBod2lycTsKIAkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCmluZGV4IDYxMTg4OTAuLjZiZTQ1MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCWlmIChJU19FUlIoc2N0eC0+ZmFsbGJhY2suY2lwKSkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgQUVTIGZhbGxiYWNrIGFsZ29yaXRobSAlcyBmYWlsZWRcbiIsCiAJCSAgICAgICBuYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIoc2N0eC0+ZmFsbGJhY2suYmxrKTsKKwkJcmV0dXJuIFBUUl9FUlIoc2N0eC0+ZmFsbGJhY2suY2lwKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCmluZGV4IDc3ZGY3MjYuLjJiOTJkNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCSAgICAgICBMUEFSX05BTUVfTEVOKTsKIAlFQkNBU0MobmFtZSwgTFBBUl9OQU1FX0xFTik7CiAJbmFtZVtMUEFSX05BTUVfTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobmFtZSk7CisJc3RyaW0obmFtZSk7CiB9CiAKIHN0cnVjdCBjcHVfaW5mbyB7CkBAIC01MjMsNyArNTIzLDcgQEAKIAltZW1jcHkobmFtZSwgZGlhZzIyNF9jcHVfbmFtZXMgKyAoKGluZGV4ICsgMSkgKiBDUFVfTkFNRV9MRU4pLAogCQlDUFVfTkFNRV9MRU4pOwogCW5hbWVbQ1BVX05BTUVfTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobmFtZSk7CisJc3RyaW0obmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKaW5kZXggZDAxZmM4ZjcuLmYwYjBkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkvKiBndWVzdCBkaXIgKi8KIAltZW1jcHkoZ3Vlc3RfbmFtZSwgZGF0YS0+Z3Vlc3RfbmFtZSwgTkFNRV9MRU4pOwogCUVCQ0FTQyhndWVzdF9uYW1lLCBOQU1FX0xFTik7Ci0Jc3Ryc3RyaXAoZ3Vlc3RfbmFtZSk7CisJc3RyaW0oZ3Vlc3RfbmFtZSk7CiAJZ3Vlc3RfZGlyID0gaHlwZnNfbWtkaXIoc2IsIHN5c3RlbXNfZGlyLCBndWVzdF9uYW1lKTsKIAlpZiAoSVNfRVJSKGd1ZXN0X2RpcikpCiAJCXJldHVybiBQVFJfRVJSKGd1ZXN0X2Rpcik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2I1MjMyZC4uMTkyYTcyMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMjY5LDcgKzI2OSw4IEBACiAjZGVmaW5lCV9fTlJfcHdyaXRldgkJMzI5CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMwCiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMQotI2RlZmluZSBOUl9zeXNjYWxscyAzMzIKKyNkZWZpbmUgX19OUl9yZWN2bW1zZwkJMzMyCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMzMwogCiAvKiAKICAqIFRoZXJlIGFyZSBzb21lIHN5c3RlbSBjYWxscyB0aGF0IGFyZSBub3QgcHJlc2VudCBvbiA2NCBiaXQsIHNvbWUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCAzMGRlMmQwLi5mYWVhY2NjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC0xODUzLDMgKzE4NTMsMTIgQEAKIAlsbGd0cgklcjMsJXIzCQkJIyBjb21wYXRfdXB0cl90ICoKIAlsbGd0cgklcjQsJXI0CQkJIyBjb21wYXRfdXB0cl90ICoKIAlqZwlzeXMzMl9leGVjdmUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisKKwkuZ2xvYmwJY29tcGF0X3N5c19yZWN2bW1zZ193cmFwcGVyCitjb21wYXRfc3lzX3JlY3ZtbXNnX3dyYXBwZXI6CisJbGdmcgklcjIsJXIyCQkJIyBpbnQKKwlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgY29tcGF0X21tc2doZHIgKgorCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGludAorCWxsZ2ZyCSVyNSwlcjUJCQkjIHVuc2lnbmVkIGludAorCWxsZ3RyCSVyNiwlcjYJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgorCWpnCWNvbXBhdF9zeXNfcmVjdm1tc2cKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDQ4OTBhYzYuLjRkNzMyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJuY3B5KF92YWx1ZSwgYnVmLCBzaXplb2YoX3ZhbHVlKSAtIDEpOwkJCVwKLQlzdHJzdHJpcChfdmFsdWUpOwkJCQkJCVwKKwlzdHJpbShfdmFsdWUpOwkJCQkJCQlcCiAJcmV0dXJuIGxlbjsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgc3lzXyMjX3ByZWZpeCMjXyMjX25hbWUjI19hdHRyID0JCVwKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiI3Vua25vd24jXG4iKTsKIAltZW1jcHkobG9hZHBhcm0sICZzY2xwX2lwbF9pbmZvLmxvYWRwYXJtLCBMT0FEUEFSTV9MRU4pOwogCUVCQ0FTQyhsb2FkcGFybSwgTE9BRFBBUk1fTEVOKTsKLQlzdHJzdHJpcChsb2FkcGFybSk7CisJc3RyaW0obG9hZHBhcm0pOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlc1xuIiwgbG9hZHBhcm0pOwogfQogCkBAIC03NzYsNyArNzc2LDcgQEAKIAltZW1jcHkobG9hZHBhcm0sIGlicC0+aXBsX2luZm8uY2N3LmxvYWRfcGFybSwgTE9BRFBBUk1fTEVOKTsKIAlFQkNBU0MobG9hZHBhcm0sIExPQURQQVJNX0xFTik7CiAJbG9hZHBhcm1bTE9BRFBBUk1fTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobG9hZHBhcm0pOworCXN0cmltKGxvYWRwYXJtKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVpcGxfZ2VuZXJpY19sb2FkcGFybV9zaG93KHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGIsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwppbmRleCA2NTNjNmExLi4xMzgxNWQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTk1OSw3ICs5NTksNyBAQAogCQkuc2V0ID0gczM5MF9mcHJlZ3Nfc2V0LAogCX0sCiAJW1JFR1NFVF9HRU5FUkFMX0VYVEVOREVEXSA9IHsKLQkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYU1RBVFVTLAorCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9TMzkwX0hJR0hfR1BSUywKIAkJLm4gPSBzaXplb2YoczM5MF9jb21wYXRfcmVnc19oaWdoKSAvIHNpemVvZihjb21wYXRfbG9uZ190KSwKIAkJLnNpemUgPSBzaXplb2YoY29tcGF0X2xvbmdfdCksCiAJCS5hbGlnbiA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCAzMGVjYTA3Li40ZjI5MmM5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zNDAsMyArMzQwLDQgQEAKIFNZU0NBTEwoc3lzX3B3cml0ZXYsc3lzX3B3cml0ZXYsY29tcGF0X3N5c19wd3JpdGV2X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxzeXNfcnRfdGdzaWdxdWV1ZWluZm8sY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mb193cmFwcGVyKSAvKiAzMzAgKi8KIFNZU0NBTEwoc3lzX3BlcmZfZXZlbnRfb3BlbixzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW5fd3JhcHBlcikKK1NZU0NBTEwoc3lzX3JlY3ZtbXNnLHN5c19yZWN2bW1zZyxjb21wYXRfc3lzX3JlY3ZtbXNnX3dyYXBwZXIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggYzJlNDJjYy4uNmU3YWQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCQkJCVNJR1RSQVApID09IE5PVElGWV9TVE9QKXsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpICE9IDApCisJaWYgKHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoY3VycmVudCwgU0lHVFJBUCkpCiAJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIH0KIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChnZXRfdXNlcigqKChfX3UxNiAqKSBvcGNvZGUpLCAoX191MTYgX191c2VyICopIGxvY2F0aW9uKSkKIAkJCXJldHVybjsKIAkJaWYgKCooKF9fdTE2ICopIG9wY29kZSkgPT0gUzM5MF9CUkVBS1BPSU5UX1UxNikgewotCQkJaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCisJCQlpZiAodHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJCQlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7CiAJCQllbHNlCiAJCQkJc2lnbmFsID0gU0lHSUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IDE5NGFhY2EuLjZhODg2MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTEyOCw4ICsxMjgsNiBAQAogCiAvKiBTSCBFdGggKi8KICNkZWZpbmUgU0hfRVRIX0FERFIJKDB4QTQ2MDAwMDApCi0jZGVmaW5lIFNIX0VUSF9NQUhSCShTSF9FVEhfQUREUiArIDB4MUMwKQotI2RlZmluZSBTSF9FVEhfTUFMUgkoU0hfRVRIX0FERFIgKyAweDFDOCkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ID0gU0hfRVRIX0FERFIsCkBAIC01MDksNiArNTA3LDcgQEAKIAogI2Vsc2UKIAorLyogTU1DIFNQSSAqLwogc3RhdGljIGludCBtbWNfc3BpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRZNik7CkBAIC01NDIsNiArNTQxLDcgQEAKIAl9LAogfTsKIAorLyogTVNJT0YwICovCiBzdGF0aWMgc3RydWN0IHNoX21zaW9mX3NwaV9pbmZvIG1zaW9mMF9kYXRhID0gewogCS5udW1fY2hpcHNlbGVjdCA9IDEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggMDRhZDBlMS4uMDczNzNhMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0xOSw5ICsxOSwxMSBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS5oPgogCiAjaWZkZWYgQ09ORklHX05SX0RNQV9DSEFOTkVMUwotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKICNlbHNlCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTAKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAppbmRleCBmMDg4NmJjLi5jNGVkNjYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMTksMTAgKzE5LDEwIEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCi0jZGVmaW5lIERNVEU0X0lSUQk0MAkvKiBETUFDMEIgKi8KLSNkZWZpbmUgRE1URTZfSVJRCTQyCi0jZGVmaW5lIERNVEU4X0lSUQk3NgkvKiBETUFDMUEgKi8KLSNkZWZpbmUgRE1URTlfSVJRCTc3CisjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQwCisjZGVmaW5lIERNVEU4X0lSUQk0MgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTQzCiAjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCiAjZGVmaW5lIERNVEUxMV9JUlEJNzMKICNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCBhNTJmMzUxLi5kMzJmOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtMjMsOSArMjMsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KICNpbmNsdWRlIDxjcHUvc2g3NzI0Lmg+CiAKKy8qIERNQSAqLworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlID0gU0hETUFfRE1BT1IxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIC8qIFNlcmlhbCAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTY0OSw2ICs2NjMsNyBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IGVmMjZlYmQuLmY2ODViOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC0yOTQsNiArMjk1LDE4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg1X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzY2lmMF9kZXZpY2UsCiAJJnNjaWYxX2RldmljZSwKQEAgLTMwNyw2ICszMjAsNyBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3Nzg1X2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCBhYWZmMDAzLi42YjNkNzA2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC02Miw2ICs2Miw3IEBACiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKKwkJc2V0X2JsX2JpdCgpOwogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCQljcHVfc2xlZXAoKTsKQEAgLTY5LDYgKzcwLDcgQEAKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJY2xlYXJfYmxfYml0KCk7CiAJfSBlbHNlCiAJCXBvbGxfaWRsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS5jIGIvYXJjaC9zaC9tbS9jYWNoZS5jCmluZGV4IGU5NDE1ZDMuLmI4NjA3ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLmMKQEAgLTEzMywxMiArMTMzLDggQEAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAlpZiAocGZuX3ZhbGlkKHBmbikpIHsKIAkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKLQkJaWYgKGRpcnR5KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7Ci0KLQkJCWlmIChwYWdlc19kb19hbGlhcyhhZGRyLCBhZGRyZXNzICYgUEFHRV9NQVNLKSkKLQkJCQlfX2ZsdXNoX3B1cmdlX3JlZ2lvbigodm9pZCAqKWFkZHIsIFBBR0VfU0laRSk7Ci0JCX0KKwkJaWYgKGRpcnR5KQorCQkJX19mbHVzaF9wdXJnZV9yZWdpb24ocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggM2IyYTVhYy4uNTUyOThlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC01MCw2ICs1MCw4IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKIAlzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UCisJc2VsZWN0IFBFUkZfRVZFTlRTCisJc2VsZWN0IEFOT05fSU5PREVTCiAJc2VsZWN0IEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlzZWxlY3QgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNjEzNzAwZi4uNjM3ZTFlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMTUzLDYgKzE1Myw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NTRTUJKDYqMzIrMTEpIC8qIFNTRS01ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NLSU5JVAkoNiozMisxMikgLyogU0tJTklUL1NUR0kgaW5zdHJ1Y3Rpb25zICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1dEVAkJKDYqMzIrMTMpIC8qIFdhdGNoZG9nIHRpbWVyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05PREVJRF9NU1IJKDYqMzIrMTkpIC8qIE5vZGVJZCBNU1IgKi8KIAogLyoKICAqIEF1eGlsaWFyeSBmbGFnczogTGludXggZGVmaW5lZCAtIEZvciBmZWF0dXJlcyBzY2F0dGVyZWQgaW4gdmFyaW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCAwOGM0OGE4Li5lZWFjODI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTAzLDcgKzEwMyw4IEBACiBleHRlcm4gdm9pZCBzZW5kX2NsZWFudXBfdmVjdG9yKHN0cnVjdCBpcnFfY2ZnICopOwogCiBzdHJ1Y3QgaXJxX2Rlc2M7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNldF9kZXNjX2FmZmluaXR5KHN0cnVjdCBpcnFfZGVzYyAqLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICosIGNvbnN0IHN0cnVjdCBjcHVtYXNrICosCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkZXN0X2lkKTsKIGV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IGRldmZuLCBpbnQgcGluLCBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqaXJxX2F0dHIpOwogZXh0ZXJuIHZvaWQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggNGZmZTA5Yi4uMWNkNThjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgTVNSX0ZTX0JBU0UJCTB4YzAwMDAxMDAgLyogNjRiaXQgRlMgYmFzZSAqLwogI2RlZmluZSBNU1JfR1NfQkFTRQkJMHhjMDAwMDEwMSAvKiA2NGJpdCBHUyBiYXNlICovCiAjZGVmaW5lIE1TUl9LRVJORUxfR1NfQkFTRQkweGMwMDAwMTAyIC8qIFN3YXBHUyBHUyBzaGFkb3cgKi8KKyNkZWZpbmUgTVNSX1RTQ19BVVgJCTB4YzAwMDAxMDMgLyogQXV4aWxpYXJ5IFRTQyAqLwogCiAvKiBFRkVSIGJpdHM6ICovCiAjZGVmaW5lIF9FRkVSX1NDRQkJMCAgLyogU1lTQ0FMTC9TWVNSRVQgKi8KQEAgLTEyMyw2ICsxMjQsNyBAQAogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX1NISUZUIDIKICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CQVNFX01BU0sJMHhmZmZmZmZmCiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9TSElGVAkyMAorI2RlZmluZSBNU1JfRkFNMTBIX05PREVfSUQJCTB4YzAwMTEwMGMKIAogLyogSzggTVNScyAqLwogI2RlZmluZSBNU1JfSzhfVE9QX01FTTEJCQkweGMwMDEwMDFhCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCmluZGV4IDJkMjI4ZmMuLmM1YmM0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0yNyw2ICsyNywxOCBAQAogCX07CiB9OwogCitzdHJ1Y3QgbXNyX2luZm8geworCXUzMiBtc3Jfbm87CisJc3RydWN0IG1zciByZWc7CisJc3RydWN0IG1zciAqbXNyczsKKwlpbnQgZXJyOworfTsKKworc3RydWN0IG1zcl9yZWdzX2luZm8geworCXUzMiAqcmVnczsKKwlpbnQgZXJyOworfTsKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfdHNjcCh1bnNpZ25lZCBpbnQgKmF1eCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvdywgaGlnaDsKQEAgLTI0MCw5ICsyNTIsOSBAQAogI2RlZmluZSBjaGVja2luZ193cm1zcmwobXNyLCB2YWwpIHdybXNyX3NhZmUoKG1zciksICh1MzIpKHZhbCksCQlcCiAJCQkJCSAgICAgKHUzMikoKHZhbCkgPj4gMzIpKQogCi0jZGVmaW5lIHdyaXRlX3RzYyh2YWwxLCB2YWwyKSB3cm1zcigweDEwLCAodmFsMSksICh2YWwyKSkKKyNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsIHZhbDIpIHdybXNyKE1TUl9JQTMyX1RTQywgKHZhbDEpLCAodmFsMikpCiAKLSNkZWZpbmUgd3JpdGVfcmR0c2NwX2F1eCh2YWwpIHdybXNyKDB4YzAwMDAxMDMsICh2YWwpLCAwKQorI2RlZmluZSB3cml0ZV9yZHRzY3BfYXV4KHZhbCkgd3Jtc3IoTVNSX1RTQ19BVVgsICh2YWwpLCAwKQogCiBzdHJ1Y3QgbXNyICptc3JzX2FsbG9jKHZvaWQpOwogdm9pZCBtc3JzX2ZyZWUoc3RydWN0IG1zciAqbXNycyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDZmOGVjMWMuLmZjODAxYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJCQl1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCiB7CiAJLyogZWN4IGlzIG9mdGVuIGFuIGlucHV0IGFzIHdlbGwgYXMgYW4gb3V0cHV0LiAqLwotCWFzbSgiY3B1aWQiCisJYXNtIHZvbGF0aWxlKCJjcHVpZCIKIAkgICAgOiAiPWEiICgqZWF4KSwKIAkgICAgICAiPWIiICgqZWJ4KSwKIAkgICAgICAiPWMiICgqZWN4KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCBjZjg2YTVlLi4zNWU4OTEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC01LDYgKzUsMjkgQEAKIAogaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpOwogCitzdHJ1Y3QgdGhyZWFkX2luZm87CitzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHM7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKndhbGtfc3RhY2tfdCkoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLAorCQkJCSAgICAgIGludCAqZ3JhcGgpOworCitleHRlcm4gdW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nCitwcmludF9jb250ZXh0X3N0YWNrX2JwKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLCBpbnQgKmdyYXBoKTsKKwogLyogR2VuZXJpYyBzdGFjayB0cmFjZXIgd2l0aCBjYWxsYmFja3MgKi8KIAogc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHsKQEAgLTE0LDYgKzM3LDcgQEAKIAl2b2lkICgqYWRkcmVzcykodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwogCS8qIE9uIG5lZ2F0aXZlIHJldHVybiBzdG9wIGR1bXBpbmcgKi8KIAlpbnQgKCpzdGFjaykodm9pZCAqZGF0YSwgY2hhciAqbmFtZSk7CisJd2Fsa19zdGFja190CXdhbGtfc3RhY2s7CiB9OwogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwppbmRleCBkMGM5OWFiLi5lYWNiZDJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwpAQCAtMzA2LDEwICszMDYsNyBAQAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCi0JcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CiB9CiAKIHN0cnVjdCBhcGljIGFwaWNfcGh5c2ZsYXQgPSAgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwppbmRleCAzOGRjZWNmLi5jYjgwNGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwpAQCAtMTMxLDEwICsxMzEsNyBAQAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gYmlnc21wX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwogfQogCiBzdGF0aWMgaW50IGJpZ3NtcF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCAxMWE1ODUxLi5kZTAwYzQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0yMjc2LDI2ICsyMjc2LDI4IEBACiAKIC8qCiAgKiBFaXRoZXIgc2V0cyBkZXNjLT5hZmZpbml0eSB0byBhIHZhbGlkIHZhbHVlLCBhbmQgcmV0dXJucwotICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCwgb3IgcmV0dXJucyBCQURfQVBJQ0lEIGFuZAorICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCBpbiBkZXN0X2lkLCBvciByZXR1cm5zIC0xIGFuZAogICogbGVhdmVzIGRlc2MtPmFmZmluaXR5IHVudG91Y2hlZC4KICAqLwogdW5zaWduZWQgaW50Ci1zZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQorc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJICB1bnNpZ25lZCBpbnQgKmRlc3RfaWQpCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobWFzaywgY3B1X29ubGluZV9tYXNrKSkKLQkJcmV0dXJuIEJBRF9BUElDSUQ7CisJCXJldHVybiAtMTsKIAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKLQkJcmV0dXJuIEJBRF9BUElDSUQ7CisJCXJldHVybiAtMTsKIAogCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiAKLQlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOworCSpkZXN0X2lkID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzExLDEyICsyMzEzLDExIEBACiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ICE9IEJBRF9BUElDSUQpIHsKKwlyZXQgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCk7CisJaWYgKCFyZXQpIHsKIAkJLyogT25seSB0aGUgaGlnaCA4IGJpdHMgYXJlIHZhbGlkLiAqLwogCQlkZXN0ID0gU0VUX0FQSUNfTE9HSUNBTF9JRChkZXN0KTsKIAkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmcpOwotCQlyZXQgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCkBAIC0zMzUxLDggKzMzNTIsNyBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKQEAgLTMzODQsOCArMzM4NCw3IEBACiAJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQogCQlyZXR1cm4gLTE7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwpAQCAtMzU2Nyw4ICszNTY2LDcgQEAKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0zNjIzLDggKzM2MjEsNyBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKQEAgLTM3MzAsOCArMzcyNyw3IEBACiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCmluZGV4IGE1MzcxZWMuLmNmNjljNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwpAQCAtMTQ4LDEwICsxNDgsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jbHVzdGVyX3BoeXNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKaW5kZXggYTg5ODlhYS4uODk3MmYzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCkBAIC0xNDYsMTAgKzE0Niw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfcGh5c19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBiNjg0YmIzLi5kNTZiMGVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTIyNSwxMCArMjI1LDcgQEAKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQogCQkJYnJlYWs7CiAJfQotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCA4ZGMzZWExLi5lNDg1ODI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTI1NCw1OSArMjU0LDM2IEBACiAKIC8qCiAgKiBGaXh1cCBjb3JlIHRvcG9sb2d5IGluZm9ybWF0aW9uIGZvciBBTUQgbXVsdGktbm9kZSBwcm9jZXNzb3JzLgotICogQXNzdW1wdGlvbiAxOiBOdW1iZXIgb2YgY29yZXMgaW4gZWFjaCBpbnRlcm5hbCBub2RlIGlzIHRoZSBzYW1lLgotICogQXNzdW1wdGlvbiAyOiBNaXhlZCBzeXN0ZW1zIHdpdGggYm90aCBzaW5nbGUtbm9kZSBhbmQgZHVhbC1ub2RlCi0gKiAgICAgICAgICAgICAgIHByb2Nlc3NvcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKiBBc3N1bXB0aW9uOiBOdW1iZXIgb2YgY29yZXMgaW4gZWFjaCBpbnRlcm5hbCBub2RlIGlzIHRoZSBzYW1lLgogICovCiAjaWZkZWYgQ09ORklHX1g4Nl9IVAogc3RhdGljIHZvaWQgX19jcHVpbml0IGFtZF9maXh1cF9kY20oc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotI2lmZGVmIENPTkZJR19QQ0kKLQl1MzIgdCwgY3BuOwotCXU4IG4sIG5faWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOworCXUzMiBub2RlcywgY29yZXNfcGVyX25vZGU7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9OT0RFSURfTVNSKSkKKwkJcmV0dXJuOworCiAJLyogZml4dXAgdG9wb2xvZ3kgaW5mb3JtYXRpb24gb25seSBvbmNlIGZvciBhIGNvcmUgKi8KIAlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BTURfRENNKSkKIAkJcmV0dXJuOwogCi0JLyogY2hlY2sgZm9yIG11bHRpLW5vZGUgcHJvY2Vzc29yIG9uIGJvb3QgY3B1ICovCi0JdCA9IHJlYWRfcGNpX2NvbmZpZygwLCAyNCwgMywgMHhlOCk7Ci0JaWYgKCEodCAmICgxIDw8IDI5KSkpCisJcmRtc3JsKE1TUl9GQU0xMEhfTk9ERV9JRCwgdmFsdWUpOworCisJbm9kZXMgPSAoKHZhbHVlID4+IDMpICYgNykgKyAxOworCWlmIChub2RlcyA9PSAxKQogCQlyZXR1cm47CiAKIAlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9BTURfRENNKTsKKwljb3Jlc19wZXJfbm9kZSA9IGMtPng4Nl9tYXhfY29yZXMgLyBub2RlczsKIAotCS8qIGNvcmVzIHBlciBub2RlOiBlYWNoIGludGVybmFsIG5vZGUgaGFzIGhhbGYgdGhlIG51bWJlciBvZiBjb3JlcyAqLwotCWNwbiA9IGMtPng4Nl9tYXhfY29yZXMgPj4gMTsKKwkvKiBzdG9yZSBOb2RlSUQsIHVzZSBsbGNfc2hhcmVkX21hcCB0byBzdG9yZSBzaWJsaW5nIGluZm8gKi8KKwlwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPSB2YWx1ZSAmIDc7CiAKLQkvKiBldmVuLW51bWJlcmVkIE5CX2lkIG9mIHRoaXMgZHVhbC1ub2RlIHByb2Nlc3NvciAqLwotCW4gPSBjLT5waHlzX3Byb2NfaWQgPDwgMTsKLQotCS8qCi0JICogZGV0ZXJtaW5lIGludGVybmFsIG5vZGUgaWQgYW5kIGFzc2lnbiBjb3JlcyBmaWZ0eS1maWZ0eSB0bwotCSAqIGVhY2ggbm9kZSBvZiB0aGUgZHVhbC1ub2RlIHByb2Nlc3NvcgotCSAqLwotCXQgPSByZWFkX3BjaV9jb25maWcoMCwgMjQgKyBuLCAzLCAweGU4KTsKLQluID0gKHQ+PjMwKSAmIDB4MzsKLQlpZiAobiA9PSAwKSB7Ci0JCWlmIChjLT5jcHVfY29yZV9pZCA8IGNwbikKLQkJCW5faWQgPSAwOwotCQllbHNlCi0JCQluX2lkID0gMTsKLQl9IGVsc2UgewotCQlpZiAoYy0+Y3B1X2NvcmVfaWQgPCBjcG4pCi0JCQluX2lkID0gMTsKLQkJZWxzZQotCQkJbl9pZCA9IDA7Ci0JfQotCi0JLyogY29tcHV0ZSBlbnRpcmUgTm9kZUlELCB1c2UgbGxjX3NoYXJlZF9tYXAgdG8gc3RvcmUgc2libGluZyBpbmZvICovCi0JcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpID0gKGMtPnBoeXNfcHJvY19pZCA8PCAxKSArIG5faWQ7Ci0KLQkvKiBmaXh1cCBjb3JlIGlkIHRvIGJlIGluIHJhbmdlIGZyb20gMCB0byBjcG4gKi8KLQljLT5jcHVfY29yZV9pZCA9IGMtPmNwdV9jb3JlX2lkICUgY3BuOwotI2VuZGlmCisJLyogZml4dXAgY29yZSBpZCB0byBiZSBpbiByYW5nZSBmcm9tIDAgdG8gKGNvcmVzX3Blcl9ub2RlIC0gMSkgKi8KKwljLT5jcHVfY29yZV9pZCA9IGMtPmNwdV9jb3JlX2lkICUgY29yZXNfcGVyX25vZGU7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDljMzFlOGIuLjg3OTY2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgOCkpIHsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpOwotCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOwogCQlzY2hlZF9jbG9ja19zdGFibGUgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA0NTUwNmQ1Li5jMjIzYjdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMjMzNiw2ICsyMzM2LDcgQEAKIAkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2tfYnAsCiB9OwogCiAjaW5jbHVkZSAiLi4vZHVtcHN0YWNrLmgiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDdlZjI0YTcuLmNiMjdmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xODcsNyArMTg3LDggQEAKIAlpbnQgaSwgZXJyID0gMDsKIAlpID0gMDsKIAotCWlmIChyZWdpc3Rlcl9jaHJkZXYoQ1BVSURfTUFKT1IsICJjcHUvY3B1aWQiLCAmY3B1aWRfZm9wcykpIHsKKwlpZiAoX19yZWdpc3Rlcl9jaHJkZXYoQ1BVSURfTUFKT1IsIDAsIE5SX0NQVVMsCisJCQkgICAgICAiY3B1L2NwdWlkIiwgJmNwdWlkX2ZvcHMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY3B1aWQ6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIGNwdWlkXG4iLAogCQkgICAgICAgQ1BVSURfTUFKT1IpOwogCQllcnIgPSAtRUJVU1k7CkBAIC0yMTYsNyArMjE3LDcgQEAKIAl9CiAJY2xhc3NfZGVzdHJveShjcHVpZF9jbGFzcyk7CiBvdXRfY2hyZGV2OgotCXVucmVnaXN0ZXJfY2hyZGV2KENQVUlEX01BSk9SLCAiY3B1L2NwdWlkIik7CisJX191bnJlZ2lzdGVyX2NocmRldihDUFVJRF9NQUpPUiwgMCwgTlJfQ1BVUywgImNwdS9jcHVpZCIpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggMGEwYWExYy4uYzU2YmMyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTA5LDYgKzEwOSwzMCBAQAogCX0KIAlyZXR1cm4gYnA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwcmludF9jb250ZXh0X3N0YWNrKTsKKwordW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFja19icChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKWJwOworCXVuc2lnbmVkIGxvbmcgKnJldF9hZGRyID0gJmZyYW1lLT5yZXR1cm5fYWRkcmVzczsKKworCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHJldF9hZGRyLCBzaXplb2YoKnJldF9hZGRyKSwgZW5kKSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcmV0X2FkZHI7CisKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIDEpOworCQkJZnJhbWUgPSBmcmFtZS0+bmV4dF9mcmFtZTsKKwkJCXJldF9hZGRyID0gJmZyYW1lLT5yZXR1cm5fYWRkcmVzczsKKwkJCXByaW50X2Z0cmFjZV9ncmFwaF9hZGRyKGFkZHIsIGRhdGEsIG9wcywgdGluZm8sIGdyYXBoKTsKKwkJfQorCX0KKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnJhbWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwcmludF9jb250ZXh0X3N0YWNrX2JwKTsKIAogCiBzdGF0aWMgdm9pZApAQCAtMTQxLDEwICsxNjUsMTEgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBwcmludF90cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcgPSBwcmludF90cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IHByaW50X3RyYWNlX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHByaW50X3RyYWNlX3N0YWNrLAotCS5hZGRyZXNzID0gcHJpbnRfdHJhY2VfYWRkcmVzcywKKwkud2FybmluZwkJPSBwcmludF90cmFjZV93YXJuaW5nLAorCS53YXJuaW5nX3N5bWJvbAkJPSBwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCQk9IHByaW50X3RyYWNlX3N0YWNrLAorCS5hZGRyZXNzCQk9IHByaW50X3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaCBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaAppbmRleCA4MTA4NmMyLi40ZmQxNDIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oCkBAIC0xNCwxMiArMTQsNiBAQAogI2RlZmluZSBnZXRfYnAoYnApIGFzbSgibW92cSAlJXJicCwgJTAiIDogIj1yIiAoYnApIDopCiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcKLXByaW50X2NvbnRleHRfc3RhY2soc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCi0JCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAotCQl1bnNpZ25lZCBsb25nICplbmQsIGludCAqZ3JhcGgpOwotCiBleHRlcm4gdm9pZAogc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCBlMGVkNGM3Li5hZTc3NWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC01OCw3ICs1OCw3IEBACiAKIAkJY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKIAkJCSgodW5zaWduZWQgbG9uZylzdGFjayAmICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKLQkJYnAgPSBwcmludF9jb250ZXh0X3N0YWNrKGNvbnRleHQsIHN0YWNrLCBicCwgb3BzLCBkYXRhLCBOVUxMLCAmZ3JhcGgpOworCQlicCA9IG9wcy0+d2Fsa19zdGFjayhjb250ZXh0LCBzdGFjaywgYnAsIG9wcywgZGF0YSwgTlVMTCwgJmdyYXBoKTsKIAogCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopY29udGV4dC0+cHJldmlvdXNfZXNwOwogCQlpZiAoIXN0YWNrKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IGIxM2FmNTMuLjBhZDk1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTE4OCw4ICsxODgsOCBAQAogCQkJaWYgKG9wcy0+c3RhY2soZGF0YSwgaWQpIDwgMCkKIAkJCQlicmVhazsKIAotCQkJYnAgPSBwcmludF9jb250ZXh0X3N0YWNrKHRpbmZvLCBzdGFjaywgYnAsIG9wcywKLQkJCQkJCSBkYXRhLCBlc3RhY2tfZW5kLCAmZ3JhcGgpOworCQkJYnAgPSBvcHMtPndhbGtfc3RhY2sodGluZm8sIHN0YWNrLCBicCwgb3BzLAorCQkJCQkgICAgIGRhdGEsIGVzdGFja19lbmQsICZncmFwaCk7CiAJCQlvcHMtPnN0YWNrKGRhdGEsICI8RU9FPiIpOwogCQkJLyoKIAkJCSAqIFdlIGxpbmsgdG8gdGhlIG5leHQgc3RhY2sgdmlhIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggZjUwNDQ3ZC4uMDVlZDdhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC03MjQsNyArNzI0LDcgQEAKIC8qCiAgKiBFYXJseSByZXNlcnZlZCBtZW1vcnkgYXJlYXMuCiAgKi8KLSNkZWZpbmUgTUFYX0VBUkxZX1JFUyAyMAorI2RlZmluZSBNQVhfRUFSTFlfUkVTIDMyCiAKIHN0cnVjdCBlYXJseV9yZXMgewogCXU2NCBzdGFydCwgZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYwppbmRleCA4NDRjMDJjLi4wYzg2MzI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAllbnVtIHVjb2RlX3N0YXRlIHVzdGF0ZTsKIAotCWlmICh1Y2ktPnZhbGlkICYmIHVjaS0+bWMpCisJaWYgKHVjaS0+dmFsaWQpCiAJCXVzdGF0ZSA9IG1pY3JvY29kZV9yZXN1bWVfY3B1KGNwdSk7CiAJZWxzZQogCQl1c3RhdGUgPSBtaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCA1NzJiMDdlLi40YmQ5M2M5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAlpID0gMDsKIAotCWlmIChyZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAiY3B1L21zciIsICZtc3JfZm9wcykpIHsKKwlpZiAoX19yZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAwLCBOUl9DUFVTLCAiY3B1L21zciIsICZtc3JfZm9wcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtc3I6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1zclxuIiwKIAkJICAgICAgIE1TUl9NQUpPUik7CiAJCWVyciA9IC1FQlVTWTsKQEAgLTI3NCw3ICsyNzQsNyBAQAogCQltc3JfZGV2aWNlX2Rlc3Ryb3koaSk7CiAJY2xhc3NfZGVzdHJveShtc3JfY2xhc3MpOwogb3V0X2NocmRldjoKLQl1bnJlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsICJjcHUvbXNyIik7CisJX191bnJlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsIDAsIE5SX0NQVVMsICJjcHUvbXNyIik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IGMzZWIyMDcuLjkyMmVlZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtNTMsMTcgKzUzLDE5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgc2F2ZV9zdGFja19vcHMgPSB7Ci0JLndhcm5pbmcgPSBzYXZlX3N0YWNrX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sgPSBzYXZlX3N0YWNrX3N0YWNrLAotCS5hZGRyZXNzID0gc2F2ZV9zdGFja19hZGRyZXNzLAorCS53YXJuaW5nCT0gc2F2ZV9zdGFja193YXJuaW5nLAorCS53YXJuaW5nX3N5bWJvbAk9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCisJLnN0YWNrCQk9IHNhdmVfc3RhY2tfc3RhY2ssCisJLmFkZHJlc3MJPSBzYXZlX3N0YWNrX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wc19ub3NjaGVkID0gewotCS53YXJuaW5nID0gc2F2ZV9zdGFja193YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gc2F2ZV9zdGFja19zdGFjaywKLQkuYWRkcmVzcyA9IHNhdmVfc3RhY2tfYWRkcmVzc19ub3NjaGVkLAorCS53YXJuaW5nCT0gc2F2ZV9zdGFja193YXJuaW5nLAorCS53YXJuaW5nX3N5bWJvbAk9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCisJLnN0YWNrCQk9IHNhdmVfc3RhY2tfc3RhY2ssCisJLmFkZHJlc3MJPSBzYXZlX3N0YWNrX2FkZHJlc3Nfbm9zY2hlZCwKKwkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IGNkOTgyZjQ4Li41OTc2ODNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC03NjMsNiArNzYzLDcgQEAKIHsKIAlpZiAoIXRzY191bnN0YWJsZSkgewogCQl0c2NfdW5zdGFibGUgPSAxOworCQlzY2hlZF9jbG9ja19zdGFibGUgPSAwOwogCQlwcmludGsoS0VSTl9JTkZPICJNYXJraW5nIFRTQyB1bnN0YWJsZSBkdWUgdG8gJXNcbiIsIHJlYXNvbik7CiAJCS8qIENoYW5nZSBvbmx5IHRoZSByYXRpbmcsIHdoZW4gbm90IHJlZ2lzdGVyZWQgKi8KIAkJaWYgKGNsb2Nrc291cmNlX3RzYy5tdWx0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X2lycS5jIGIvYXJjaC94ODYva2VybmVsL3V2X2lycS5jCmluZGV4IDYxZDgwNWQuLmVjZTczZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKQEAgLTIxNSw4ICsyMTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgbW1yX29mZnNldDsKIAl1bnNpZ25lZCBtbXJfcG5vZGU7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAltbXJfdmFsdWUgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDQ1YjIwZTQuLmNmZmQ3NTRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAKIGNsZWFuLWZpbGVzIDo9IGluYXQtdGFibGVzLmMKIAotb2JqLSQoQ09ORklHX1NNUCkgOj0gbXNyLm8KK29iai0kKENPTkZJR19TTVApICs9IG1zci1zbXAubwogCiBsaWIteSA6PSBkZWxheS5vCiBsaWIteSArPSB0aHVua18kKEJJVFMpLm8KQEAgLTIyLDcgKzIyLDcgQEAKIGxpYi15ICs9IG1lbWNweV8kKEJJVFMpLm8KIGxpYi0kKENPTkZJR19LUFJPQkVTKSArPSBpbnNuLm8gaW5hdC5vCiAKLW9iai15ICs9IG1zci1yZWcubyBtc3ItcmVnLWV4cG9ydC5vCitvYmoteSArPSBtc3IubyBtc3ItcmVnLm8gbXNyLXJlZy1leHBvcnQubwogCiBpZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiAgICAgICAgIG9iai15ICs9IGF0b21pYzY0XzMyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3Itc21wLmMgYi9hcmNoL3g4Ni9saWIvbXNyLXNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjFiODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvbXNyLXNtcC5jCkBAIC0wLDAgKzEsMjA0IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKworc3RhdGljIHZvaWQgX19yZG1zcl9vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKwlzdHJ1Y3QgbXNyICpyZWc7CisJaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChydi0+bXNycykKKwkJcmVnID0gcGVyX2NwdV9wdHIocnYtPm1zcnMsIHRoaXNfY3B1KTsKKwllbHNlCisJCXJlZyA9ICZydi0+cmVnOworCisJcmRtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX29uX2NwdSh2b2lkICppbmZvKQoreworCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOworCXN0cnVjdCBtc3IgKnJlZzsKKwlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHJ2LT5tc3JzKQorCQlyZWcgPSBwZXJfY3B1X3B0cihydi0+bXNycywgdGhpc19jcHUpOworCWVsc2UKKwkJcmVnID0gJnJ2LT5yZWc7CisKKwl3cm1zcihydi0+bXNyX25vLCByZWctPmwsIHJlZy0+aCk7Cit9CisKK2ludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisKKwltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKKworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3JkbXNyX29uX2NwdSwgJnJ2LCAxKTsKKwkqbCA9IHJ2LnJlZy5sOworCSpoID0gcnYucmVnLmg7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChyZG1zcl9vbl9jcHUpOworCitpbnQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfaW5mbyBydjsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNyX25vID0gbXNyX25vOworCXJ2LnJlZy5sID0gbDsKKwlydi5yZWcuaCA9IGg7CisJZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193cm1zcl9vbl9jcHUsICZydiwgMSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHUpOworCitzdGF0aWMgdm9pZCBfX3J3bXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sCisJCQkgICAgc3RydWN0IG1zciAqbXNycywKKwkJCSAgICB2b2lkICgqbXNyX2Z1bmMpICh2b2lkICppbmZvKSkKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisJaW50IHRoaXNfY3B1OworCisJbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7CisKKwlydi5tc3JzCSAgPSBtc3JzOworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKworCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQorCQltc3JfZnVuYygmcnYpOworCisJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBtc3JfZnVuYywgJnJ2LCAxKTsKKwlwdXRfY3B1KCk7Cit9CisKKy8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcworICoKKyAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCisgKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCisgKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcworICoKKyAqLwordm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKQoreworCV9fcndtc3Jfb25fY3B1cyhtYXNrLCBtc3Jfbm8sIG1zcnMsIF9fcmRtc3Jfb25fY3B1KTsKK30KK0VYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1cyk7CisKKy8qCisgKiB3cm1zciBvbiBhIGJ1bmNoIG9mIENQVXMKKyAqCisgKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcworICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgorICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKKyAqCisgKi8KK3ZvaWQgd3Jtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKK3sKKwlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3dybXNyX29uX2NwdSk7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdXMpOworCisvKiBUaGVzZSAic2FmZSIgdmFyaWFudHMgYXJlIHNsb3dlciBhbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGFyZ2V0IE1TUgorICAgbWF5IG5vdCBhY3R1YWxseSBleGlzdC4gKi8KK3N0YXRpYyB2b2lkIF9fcmRtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlKHJ2LT5tc3Jfbm8sICZydi0+cmVnLmwsICZydi0+cmVnLmgpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87CisKKwlydi0+ZXJyID0gd3Jtc3Jfc2FmZShydi0+bXNyX25vLCBydi0+cmVnLmwsIHJ2LT5yZWcuaCk7Cit9CisKK2ludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfaW5mbyBydjsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNyX25vID0gbXNyX25vOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9vbl9jcHUsICZydiwgMSk7CisJKmwgPSBydi5yZWcubDsKKwkqaCA9IHJ2LnJlZy5oOworCisJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKK30KK0VYUE9SVF9TWU1CT0wocmRtc3Jfc2FmZV9vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQoreworCWludCBlcnI7CisJc3RydWN0IG1zcl9pbmZvIHJ2OworCisJbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7CisKKwlydi5tc3Jfbm8gPSBtc3Jfbm87CisJcnYucmVnLmwgPSBsOworCXJ2LnJlZy5oID0gaDsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX3NhZmVfb25fY3B1LCAmcnYsIDEpOworCisJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKK30KK0VYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOworCisvKgorICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgorICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KKyAqLworc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Cit9CisKK2ludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OworCisJcnYucmVncyAgID0gcmVnczsKKwlydi5lcnIgICAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKKworCXJ2LnJlZ3MgPSByZWdzOworCXJ2LmVyciAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21zci5jIGIvYXJjaC94ODYvbGliL21zci5jCmluZGV4IDg3MjgzNDEuLjhmOGVlYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tc3IuYworKysgYi9hcmNoL3g4Ni9saWIvbXNyLmMKQEAgLTEsMTIzICsxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogCi1zdHJ1Y3QgbXNyX2luZm8gewotCXUzMiBtc3Jfbm87Ci0Jc3RydWN0IG1zciByZWc7Ci0Jc3RydWN0IG1zciAqbXNyczsKLQlpbnQgZXJyOwotfTsKLQotc3RhdGljIHZvaWQgX19yZG1zcl9vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQlzdHJ1Y3QgbXNyICpyZWc7Ci0JaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChydi0+bXNycykKLQkJcmVnID0gcGVyX2NwdV9wdHIocnYtPm1zcnMsIHRoaXNfY3B1KTsKLQllbHNlCi0JCXJlZyA9ICZydi0+cmVnOwotCi0JcmRtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dybXNyX29uX2NwdSh2b2lkICppbmZvKQotewotCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOwotCXN0cnVjdCBtc3IgKnJlZzsKLQlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHJ2LT5tc3JzKQotCQlyZWcgPSBwZXJfY3B1X3B0cihydi0+bXNycywgdGhpc19jcHUpOwotCWVsc2UKLQkJcmVnID0gJnJ2LT5yZWc7Ci0KLQl3cm1zcihydi0+bXNyX25vLCByZWctPmwsIHJlZy0+aCk7Ci19Ci0KLWludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0KLQltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKLQotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3JkbXNyX29uX2NwdSwgJnJ2LCAxKTsKLQkqbCA9IHJ2LnJlZy5sOwotCSpoID0gcnYucmVnLmg7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChyZG1zcl9vbl9jcHUpOwotCi1pbnQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfaW5mbyBydjsKLQotCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOwotCi0JcnYubXNyX25vID0gbXNyX25vOwotCXJ2LnJlZy5sID0gbDsKLQlydi5yZWcuaCA9IGg7Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193cm1zcl9vbl9jcHUsICZydiwgMSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHUpOwotCi1zdGF0aWMgdm9pZCBfX3J3bXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sCi0JCQkgICAgc3RydWN0IG1zciAqbXNycywKLQkJCSAgICB2b2lkICgqbXNyX2Z1bmMpICh2b2lkICppbmZvKSkKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0JaW50IHRoaXNfY3B1OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3JzCSAgPSBtc3JzOwotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQotCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOwotCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQotCQltc3JfZnVuYygmcnYpOwotCi0Jc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBtc3JfZnVuYywgJnJ2LCAxKTsKLQlwdXRfY3B1KCk7Ci19Ci0KLS8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcwotICoKLSAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCi0gKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCi0gKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcwotICoKLSAqLwotdm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKQotewotCV9fcndtc3Jfb25fY3B1cyhtYXNrLCBtc3Jfbm8sIG1zcnMsIF9fcmRtc3Jfb25fY3B1KTsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1cyk7Ci0KLS8qCi0gKiB3cm1zciBvbiBhIGJ1bmNoIG9mIENQVXMKLSAqCi0gKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcwotICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgotICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKLSAqCi0gKi8KLXZvaWQgd3Jtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKLXsKLQlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3dybXNyX29uX2NwdSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdXMpOwotCiBzdHJ1Y3QgbXNyICptc3JzX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IG1zciAqbXNycyA9IE5VTEw7CkBAIC0xMzcsMTAwICsyMSwzIEBACiAJZnJlZV9wZXJjcHUobXNycyk7CiB9CiBFWFBPUlRfU1lNQk9MKG1zcnNfZnJlZSk7Ci0KLS8qIFRoZXNlICJzYWZlIiB2YXJpYW50cyBhcmUgc2xvd2VyIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSB0YXJnZXQgTVNSCi0gICBtYXkgbm90IGFjdHVhbGx5IGV4aXN0LiAqLwotc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX29uX2NwdSh2b2lkICppbmZvKQotewotCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOwotCi0JcnYtPmVyciA9IHJkbXNyX3NhZmUocnYtPm1zcl9ubywgJnJ2LT5yZWcubCwgJnJ2LT5yZWcuaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3Jtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQotCXJ2LT5lcnIgPSB3cm1zcl9zYWZlKHJ2LT5tc3Jfbm8sIHJ2LT5yZWcubCwgcnYtPnJlZy5oKTsKLX0KLQotaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9zYWZlX29uX2NwdSwgJnJ2LCAxKTsKLQkqbCA9IHJ2LnJlZy5sOwotCSpoID0gcnYucmVnLmg7Ci0KLQlyZXR1cm4gZXJyID8gZXJyIDogcnYuZXJyOwotfQotRVhQT1JUX1NZTUJPTChyZG1zcl9zYWZlX29uX2NwdSk7Ci0KLWludCB3cm1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0KLQltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKLQotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQlydi5yZWcubCA9IGw7Ci0JcnYucmVnLmggPSBoOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9vbl9jcHUsICZydiwgMSk7Ci0KLQlyZXR1cm4gZXJyID8gZXJyIDogcnYuZXJyOwotfQotRVhQT1JUX1NZTUJPTCh3cm1zcl9zYWZlX29uX2NwdSk7Ci0KLS8qCi0gKiBUaGVzZSB2YXJpYW50cyBhcmUgc2lnbmlmaWNhbnRseSBzbG93ZXIsIGJ1dCBhbGxvd3MgY29udHJvbCBvdmVyCi0gKiB0aGUgZW50aXJlIDMyLWJpdCBHUFIgc2V0LgotICovCi1zdHJ1Y3QgbXNyX3JlZ3NfaW5mbyB7Ci0JdTMyICpyZWdzOwotCWludCBlcnI7Ci19OwotCi1zdGF0aWMgdm9pZCBfX3JkbXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOwotCi0JcnYtPmVyciA9IHJkbXNyX3NhZmVfcmVncyhydi0+cmVncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh2b2lkICppbmZvKQotewotCXN0cnVjdCBtc3JfcmVnc19pbmZvICpydiA9IGluZm87Ci0KLQlydi0+ZXJyID0gd3Jtc3Jfc2FmZV9yZWdzKHJ2LT5yZWdzKTsKLX0KLQotaW50IHJkbXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyICpyZWdzKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9yZWdzX2luZm8gcnY7Ci0KLQlydi5yZWdzICAgPSByZWdzOwotCXJ2LmVyciAgICA9IC1FSU87Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfc2FmZV9yZWdzX29uX2NwdSk7Ci0KLWludCB3cm1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OwotCi0JcnYucmVncyA9IHJlZ3M7Ci0JcnYuZXJyICA9IC1FSU87Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193cm1zcl9zYWZlX3JlZ3Nfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKaW5kZXggNmY4YWEzMy4uOTMyNGYxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL3NyYXRfMzIuYwpAQCAtMjY3LDYgKzI2Nyw4IEBACiAJCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoY2h1bmstPm5pZCwgY2h1bmstPnN0YXJ0X3BmbiwKIAkJCQkJICAgICBtaW4oY2h1bmstPmVuZF9wZm4sIG1heF9wZm4pKTsKIAl9CisJLyogZm9yIG91dCBvZiBvcmRlciBlbnRyaWVzIGluIFNSQVQgKi8KKwlzb3J0X25vZGVfbWFwKCk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG5vZGVfc3RhcnRfcGZuW25pZF07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKaW5kZXggZDg5MDc1NC4uYTI3MTI0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF82NC5jCisrKyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcyA9IG5vZGVzW2ldLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJCXVuc2lnbmVkIGxvbmcgZSA9IG5vZGVzW2ldLmVuZCA+PiBQQUdFX1NISUZUOwogCQlweG1yYW0gKz0gZSAtIHM7Ci0JCXB4bXJhbSAtPSBhYnNlbnRfcGFnZXNfaW5fcmFuZ2UocywgZSk7CisJCXB4bXJhbSAtPSBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShpLCBzLCBlKTsKIAkJaWYgKChsb25nKXB4bXJhbSA8IDApCiAJCQlweG1yYW0gPSAwOwogCX0KQEAgLTM3Myw2ICszNzMsOCBAQAogCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpCiAJCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoaSwgbm9kZXNbaV0uc3RhcnQgPj4gUEFHRV9TSElGVCwKIAkJCQkJCW5vZGVzW2ldLmVuZCA+PiBQQUdFX1NISUZUKTsKKwkvKiBmb3Igb3V0IG9mIG9yZGVyIGVudHJpZXMgaW4gU1JBVCAqLworCXNvcnRfbm9kZV9tYXAoKTsKIAlpZiAoIW5vZGVzX2NvdmVyX21lbW9yeShub2RlcykpIHsKIAkJYmFkX3NyYXQoKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCAwNDQ4OTdiLi4zODU1MDk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtNDEsMTAgKzQxLDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKLQkud2FybmluZyA9IGJhY2t0cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sgPSBiYWNrdHJhY2Vfc3RhY2ssCi0JLmFkZHJlc3MgPSBiYWNrdHJhY2VfYWRkcmVzcywKKwkud2FybmluZwk9IGJhY2t0cmFjZV93YXJuaW5nLAorCS53YXJuaW5nX3N5bWJvbAk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCT0gYmFja3RyYWNlX3N0YWNrLAorCS5hZGRyZXNzCT0gYmFja3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogc3RydWN0IGZyYW1lX2hlYWQgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sgYi9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3awppbmRleCAwZDEzY2Q5Li41YmJiNWEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3aworKysgYi9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3awpAQCAtOSw3ICs5LDcgQEAKIH0KIAogL15HTlUvIHsKLQlzcGxpdCgkNCwgdmVyLCAiLiIpOworCXNwbGl0KCQzLCB2ZXIsICIuIik7CiAJaWYgKHZlclsxXSA+IG9kX3ZlciB8fAogCSAgICAodmVyWzFdID09IG9kX3ZlciAmJiB2ZXJbMl0gPj0gb2Rfc3ZlcikpIHsKIAkJZXhpdCAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrIGIvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrCmluZGV4IDdhNjg1MDYuLmVhZjExZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3aworKysgYi9hcmNoL3g4Ni90b29scy9nZW4taW5zbi1hdHRyLXg4Ni5hd2sKQEAgLTYsOCArNiw2IEBACiAKICMgQXdrIGltcGxlbWVudGF0aW9uIHNhbml0eSBjaGVjawogZnVuY3Rpb24gY2hlY2tfYXdrX2ltcGxlbWVudCgpIHsKLQlpZiAoIW1hdGNoKCJhYmMiLCAiW1s6bG93ZXI6XV0rIikpCi0JCXJldHVybiAiWW91ciBhd2sgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3Rvci1jbGFzcy4iCiAJaWYgKHNwcmludGYoIiV4IiwgMCkgIT0gIjAiKQogCQlyZXR1cm4gIllvdXIgYXdrIGhhcyBhIHByaW50Zi1mb3JtYXQgcHJvYmxlbS4iCiAJcmV0dXJuICIiCkBAIC00NCwxMiArNDIsMTIgQEAKIAlkZWxldGUgZ3RhYmxlCiAJZGVsZXRlIGF0YWJsZQogCi0Jb3BuZF9leHByID0gIl5bWzphbHBoYTpdL10iCisJb3BuZF9leHByID0gIl5bQS1aYS16L10iCiAJZXh0X2V4cHIgPSAiXlxcKCIKIAlzZXBfZXhwciA9ICJeXFx8JCIKLQlncm91cF9leHByID0gIl5HcnBbWzphbG51bTpdXSsiCisJZ3JvdXBfZXhwciA9ICJeR3JwWzAtOUEtWmEtel0rIgogCi0JaW1tX2V4cHIgPSAiXltJSkFPXVtbOmxvd2VyOl1dIgorCWltbV9leHByID0gIl5bSUpBT11bYS16XSIKIAlpbW1fZmxhZ1siSWIiXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX0JZVEUpIgogCWltbV9mbGFnWyJKYiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fQllURSkiCiAJaW1tX2ZsYWdbIkl3Il0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9XT1JEKSIKQEAgLTYyLDcgKzYwLDcgQEAKIAlpbW1fZmxhZ1siT2IiXSA9ICJJTkFUX01PRkZTRVQiCiAJaW1tX2ZsYWdbIk92Il0gPSAiSU5BVF9NT0ZGU0VUIgogCi0JbW9kcm1fZXhwciA9ICJeKFtDREVHTU5QUVJTVVZXL11bWzpsb3dlcjpdXSt8TlRBfFRbMDEyXSkiCisJbW9kcm1fZXhwciA9ICJeKFtDREVHTU5QUVJTVVZXL11bYS16XSt8TlRBfFRbMDEyXSkiCiAJZm9yY2U2NF9leHByID0gIlxcKFtkZl02NFxcKSIKIAlyZXhfZXhwciA9ICJeUkVYKFxcLltYUldCXSspKiIKIAlmcHVfZXhwciA9ICJeRVNDIiAjIFRPRE8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDE2ODNlYmQuLmY0ZWE1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMzAyMiw3ICszMDIyLDcgQEAKIAljYXNlIFdSSVRFXzE2OgogCQlyZXR1cm4gYXRhX3Njc2lfcndfeGxhdDsKIAotCWNhc2UgMHg5MyAvKldSSVRFX1NBTUVfMTYqLzoKKwljYXNlIFdSSVRFX1NBTUVfMTY6CiAJCXJldHVybiBhdGFfc2NzaV93cml0ZV9zYW1lX3hsYXQ7CiAKIAljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IGVmYTg3NzMuLjc0MTA2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTIyNzUsNyArMjI3NSw3IEBACiAJYXAgPSBxYy0+YXA7CiAJLyogRHJhaW4gdXAgdG8gNjRLIG9mIGRhdGEgYmVmb3JlIHdlIGdpdmUgdXAgdGhpcyByZWNvdmVyeSBtZXRob2QgKi8KIAlmb3IgKGNvdW50ID0gMDsgKGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApICYgQVRBX0RSUSkKLQkJCQkJCSYmIGNvdW50IDwgMzI3Njg7IGNvdW50KyspCisJCQkJCQkmJiBjb3VudCA8IDY1NTM2OyBjb3VudCArPSAyKQogCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CiAKIAkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggYzRiNDdhM2UuLjAyYzgxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKQEAgLTE1NTcsNiArMTU1NywyNSBAQAogCVBfQVRBUElfRE1BUlEsCiAJUF9BVEFQSV9JTlRSUSwKIAlQX0FUQVBJX0lPUkRZLAorCVBfQVRBUElfRDBBLAorCVBfQVRBUElfRDFBLAorCVBfQVRBUElfRDJBLAorCVBfQVRBUElfRDNBLAorCVBfQVRBUElfRDRBLAorCVBfQVRBUElfRDVBLAorCVBfQVRBUElfRDZBLAorCVBfQVRBUElfRDdBLAorCVBfQVRBUElfRDhBLAorCVBfQVRBUElfRDlBLAorCVBfQVRBUElfRDEwQSwKKwlQX0FUQVBJX0QxMUEsCisJUF9BVEFQSV9EMTJBLAorCVBfQVRBUElfRDEzQSwKKwlQX0FUQVBJX0QxNEEsCisJUF9BVEFQSV9EMTVBLAorCVBfQVRBUElfQTBBLAorCVBfQVRBUElfQTFBLAorCVBfQVRBUElfQTJBLAogCTAKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCmluZGV4IGRhZGZjMzUuLjBlZmIxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2NtZDY0eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIC8qCiAgKiBDTUQ2NHggc3BlY2lmaWMgcmVnaXN0ZXJzIGRlZmluaXRpb24uCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJcmVnVSB8PSB1ZG1hX2RhdGFbYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMF0gPDwgc2hpZnQ7CiAJCS8qIE1lcmdlIHRoZSBjb250cm9sIGJpdHMgKi8KIAkJcmVnVSB8PSAxIDw8IGFkZXYtPmRldm5vOyAvKiBVRE1BIG9uICovCi0JCWlmIChhZGV2LT5kbWFfbW9kZSA+IDIpCS8qIDE1blMgdGltaW5nICovCisJCWlmIChhZGV2LT5kbWFfbW9kZSA+IFhGRVJfVURNQV8yKSAvKiAxNW5TIHRpbWluZyAqLwogCQkJcmVnVSB8PSA0IDw8IGFkZXYtPmRldm5vOwogCX0gZWxzZSB7CiAJCXJlZ1UgJj0gfiAoMSA8PCBhZGV2LT5kZXZubyk7CS8qIFVETUEgb2ZmICovCkBAIC0yNTQsMTA5ICsyNTQsMTcgQEAKIH0KIAogLyoqCi0gKgljbWQ2NHhfYm1kbWFfc3RvcAktCURNQSBzdG9wIGNhbGxiYWNrCisgKgljbWQ2NDZyMV9kbWFfc3RvcAktCURNQSBzdG9wIGNhbGxiYWNrCiAgKglAcWM6IENvbW1hbmQgaW4gcHJvZ3Jlc3MKICAqCi0gKglUcmFjayB0aGUgY29tcGxldGlvbiBvZiBsaXZlIERNQSBjb21tYW5kcyBhbmQgY2xlYXIgdGhlCi0gKglob3N0LT5wcml2YXRlX2RhdGEgRE1BIHRyYWNraW5nIGZsYWcgYXMgd2UgZG8uCisgKglTdHViIGZvciBub3cgd2hpbGUgaW52ZXN0aWdhdGluZyB0aGUgcjEgcXVpcmsgaW4gdGhlIG9sZCBkcml2ZXIuCiAgKi8KIAotc3RhdGljIHZvaWQgY21kNjR4X2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB2b2lkIGNtZDY0NnIxX2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCWF0YV9ibWRtYV9zdG9wKHFjKTsKLQlXQVJOX09OKGFwLT5ob3N0LT5wcml2YXRlX2RhdGEgIT0gYXApOwotCWFwLT5ob3N0LT5wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi0vKioKLSAqCWNtZDY0eF9xY19kZWZlcgkJLQlEZWZlciBsb2dpYyBmb3IgY2hpcCBsaW1pdHMKLSAqCUBxYzogcXVldWVkIGNvbW1hbmQKLSAqCi0gKglEZWNpZGUgd2hldGhlciB3ZSBjYW4gaXNzdWUgdGhlIGNvbW1hbmQuIENhbGxlZCB1bmRlciB0aGUgaG9zdCBsb2NrLgotICovCi0KLXN0YXRpYyBpbnQgY21kNjR4X3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcWMtPmFwLT5ob3N0OwotCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gaG9zdC0+cG9ydHNbMSBeIHFjLT5hcC0+cG9ydF9ub107Ci0JaW50IHJjOwotCWludCBkbWEgPSAwOwotCi0JLyogQXBwbHkgdGhlIEFUQSBydWxlcyBmaXJzdCAqLwotCXJjID0gYXRhX3N0ZF9xY19kZWZlcihxYyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQVBJX1BST1RfRE1BIHx8Ci0JCQlxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BKQotCQlkbWEgPSAxOwotCi0JLyogSWYgdGhlIG90aGVyIHBvcnQgaXMgbm90IGxpdmUgdGhlbiBpc3N1ZSB0aGUgY29tbWFuZCAqLwotCWlmIChhbHQgPT0gTlVMTCB8fCAhYWx0LT5xY19hY3RpdmUpIHsKLQkJaWYgKGRtYSkKLQkJCWhvc3QtPnByaXZhdGVfZGF0YSA9IHFjLT5hcDsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIElmIHRoZXJlIGlzIGEgbGl2ZSBETUEgY29tbWFuZCB0aGVuIHdhaXQgKi8KLQlpZiAoaG9zdC0+cHJpdmF0ZV9kYXRhICE9IE5VTEwpCi0JCXJldHVybiAJQVRBX0RFRkVSX1BPUlQ7Ci0JaWYgKGRtYSkKLQkJLyogQ2Fubm90IG92ZXJsYXAgb3VyIERNQSBjb21tYW5kICovCi0JCXJldHVybiBBVEFfREVGRVJfUE9SVDsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgljbWQ2NHhfaW50ZXJydXB0IC0gQVRBIGhvc3QgaW50ZXJydXB0IGhhbmRsZXIKLSAqCUBpcnE6IGlycSBsaW5lICh1bnVzZWQpCi0gKglAZGV2X2luc3RhbmNlOiBwb2ludGVyIHRvIG91ciBhdGFfaG9zdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKglPdXIgaW50ZXJydXB0IGhhbmRsZXIgZm9yIFBDSSBJREUgZGV2aWNlcy4gIENhbGxzCi0gKglhdGFfc2ZmX2hvc3RfaW50cigpIGZvciBlYWNoIHBvcnQgdGhhdCBpcyBmbGFnZ2luZyBhbiBJUlEuIFdlIGNhbm5vdAotICoJdXNlIHRoZSBkZWZhdWx0cyBhcyB3ZSBuZWVkIHRvIGF2b2lkIHRvdWNoaW5nIHN0YXR1cy9hbHRzdGF0dXMgZHVyaW5nCi0gKglhIERNQS4KLSAqCi0gKglMT0NLSU5HOgotICoJT2J0YWlucyBob3N0IGxvY2sgZHVyaW5nIG9wZXJhdGlvbi4KLSAqCi0gKglSRVRVUk5TOgotICoJSVJRX05PTkUgb3IgSVJRX0hBTkRMRUQuCi0gKi8KLWlycXJldHVybl90IGNtZDY0eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaG9zdC0+ZGV2KTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdGF0aWMgY29uc3QgdTggaXJxX3JlZ1syXSA9IHsgQ0ZSLCBBUlRUSU0yMyB9OwotCXN0YXRpYyBjb25zdCB1OCBpcnFfbWFza1syXSA9IHsgMSA8PCAyLCAxIDw8IDQgfTsKLQotCS8qIFRPRE86IG1ha2UgX2lycXNhdmUgY29uZGl0aW9uYWwgb24geDg2IFBDSSBJREUgbGVnYWN5IG1vZGUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgewotCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwotCQl1OCByZWc7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgaXJxX3JlZ1tpXSwgJnJlZyk7Ci0JCWFwID0gaG9zdC0+cG9ydHNbaV07Ci0JCWlmIChhcCAmJiAocmVnICYgaXJxX21hc2tbaV0pICYmCi0JCSAgICAhKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgewotCQkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKLQotCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwotCQkJaWYgKHFjICYmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkgJiYKLQkJCSAgICAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQotCQkJCWhhbmRsZWQgfD0gYXRhX3NmZl9ob3N0X2ludHIoYXAsIHFjKTsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwotfQogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgY21kNjR4X3NodCA9IHsKIAlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CkBAIC0zNjUsOCArMjczLDYgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IGNtZDY0eF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBjbWQ2NHhfc2V0X2RtYW1vZGUsCi0JLmJtZG1hX3N0b3AJPSBjbWQ2NHhfYm1kbWFfc3RvcCwKLQkucWNfZGVmZXIJPSBjbWQ2NHhfcWNfZGVmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjR4X3BvcnRfb3BzID0gewpAQCAtMzc2LDYgKzI4Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjbWQ2NDZyMV9wb3J0X29wcyA9IHsKIAkuaW5oZXJpdHMJPSAmY21kNjR4X2Jhc2Vfb3BzLAorCS5ibWRtYV9zdG9wCT0gY21kNjQ2cjFfYm1kbWFfc3RvcCwKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIH07CiAKQEAgLTM4Myw3ICsyOTAsNiBAQAogCS5pbmhlcml0cwk9ICZjbWQ2NHhfYmFzZV9vcHMsCiAJLmJtZG1hX3N0b3AJPSBjbWQ2NDhfYm1kbWFfc3RvcCwKIAkuY2FibGVfZGV0ZWN0CT0gY21kNjQ4X2NhYmxlX2RldGVjdCwKLQkucWNfZGVmZXIJPSBhdGFfc3RkX3FjX2RlZmVyCiB9OwogCiBzdGF0aWMgaW50IGNtZDY0eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtNDMyLDcgKzMzOCw2IEBACiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmY21kX2luZm9baWQtPmRyaXZlcl9kYXRhXSwgTlVMTCB9OwogCXU4IG1yZG1vZGU7CiAJaW50IHJjOwotCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKIAogCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykKQEAgLTQ1MCwyNSArMzU1LDIwIEBACiAJCQlwcGlbMF0gPSAmY21kX2luZm9bM107CiAJfQogCi0KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNUkRNT0RFLCAmbXJkbW9kZSk7CiAJbXJkbW9kZSAmPSB+IDB4MzA7CS8qIElSUSBzZXQgdXAgKi8KIAltcmRtb2RlIHw9IDB4MDI7CS8qIE1lbW9yeSByZWFkIGxpbmUgZW5hYmxlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIE1SRE1PREUsIG1yZG1vZGUpOwogCisJLyogRm9yY2UgUElPIDAgaGVyZS4uICovCisKIAkvKiBQUEMgc3BlY2lmaWMgZml4dXAgY29waWVkIGZyb20gb2xkIGRyaXZlciAqLwogI2lmZGVmIENPTkZJR19QUEMKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgVURJREVUQ1IwLCAweEYwKTsKICNlbmRpZgotCXJjID0gYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCS8qIFdlIHVzZSB0aGlzIHBvaW50ZXIgdG8gdHJhY2sgdGhlIEFQIHdoaWNoIGhhcyBETUEgcnVubmluZyAqLwotCWhvc3QtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlyZXR1cm4gYXRhX3BjaV9zZmZfYWN0aXZhdGVfaG9zdChob3N0LCBjbWQ2NHhfaW50ZXJydXB0LCAmY21kNjR4X3NodCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0eF9zaHQsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IDlhMDlhMWIuLmRkMjZiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC04LDcgKzgsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEJICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgSW5jCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNwlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOQlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICoKICAqIFRPRE8KQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuOCIKIAogZW51bSB7CiAJSFBUX1BDSV9GQVNUCT0JKDEgPDwgMzEpLApAQCAtMjY0LDcgKzI2NCw3IEBACiAKIHN0YXRpYyB2b2lkIGhwdDN4Mm5fc2V0X2Nsb2NrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBzb3VyY2UpCiB7Ci0Jdm9pZCBfX2lvbWVtICpibWRtYSA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKwl2b2lkIF9faW9tZW0gKmJtZG1hID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyIC0gYXAtPnBvcnRfbm8gKiA4OwogCiAJLyogVHJpc3RhdGUgdGhlIGJ1cyAqLwogCWlvd3JpdGU4KDB4ODAsIGJtZG1hKzB4NzMpOwpAQCAtMjc0LDkgKzI3NCw5IEBACiAJaW93cml0ZTgoc291cmNlLCBibWRtYSsweDdCKTsKIAlpb3dyaXRlOCgweEMwLCBibWRtYSsweDc5KTsKIAotCS8qIFJlc2V0IHN0YXRlIG1hY2hpbmVzICovCi0JaW93cml0ZTgoMHgzNywgYm1kbWErMHg3MCk7Ci0JaW93cml0ZTgoMHgzNywgYm1kbWErMHg3NCk7CisJLyogUmVzZXQgc3RhdGUgbWFjaGluZXMsIGF2b2lkIGVuYWJsaW5nIHRoZSBkaXNhYmxlZCBjaGFubmVscyAqLworCWlvd3JpdGU4KGlvcmVhZDgoYm1kbWErMHg3MCkgfCAweDMyLCBibWRtYSsweDcwKTsKKwlpb3dyaXRlOChpb3JlYWQ4KGJtZG1hKzB4NzQpIHwgMHgzMiwgYm1kbWErMHg3NCk7CiAKIAkvKiBDb21wbGV0ZSByZXNldCAqLwogCWlvd3JpdGU4KDB4MDAsIGJtZG1hKzB4NzkpOwpAQCAtMjg2LDIxICsyODYsMTAgQEAKIAlpb3dyaXRlOCgweDAwLCBibWRtYSsweDc3KTsKIH0KIAotLyogQ2hlY2sgaWYgb3VyIHBhcnRuZXIgaW50ZXJmYWNlIGlzIGJ1c3kgKi8KLQotc3RhdGljIGludCBocHQzeDJuX3BhaXJfaWRsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OwotCXN0cnVjdCBhdGFfcG9ydCAqcGFpciA9IGhvc3QtPnBvcnRzW2FwLT5wb3J0X25vIF4gMV07Ci0KLQlpZiAocGFpci0+aHNtX3Rhc2tfc3RhdGUgPT0gSFNNX1NUX0lETEUpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhwdDN4Mm5fdXNlX2RwbGwoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdyaXRpbmcpCiB7CiAJbG9uZyBmbGFncyA9IChsb25nKWFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKIAkvKiBTZWUgaWYgd2Ugc2hvdWxkIHVzZSB0aGUgRFBMTCAqLwogCWlmICh3cml0aW5nKQogCQlyZXR1cm4gVVNFX0RQTEw7CS8qIE5lZWRlZCBmb3Igd3JpdGUgKi8KQEAgLTMwOSwyMCArMjk4LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaHB0M3gybl9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBhcC0+aG9zdC0+cG9ydHNbYXAtPnBvcnRfbm8gXiAxXTsKKwlpbnQgcmMsIGZsYWdzID0gKGxvbmcpYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlpbnQgZHBsbCA9IGhwdDN4Mm5fdXNlX2RwbGwoYXAsIHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoKGZsYWdzICYgVVNFX0RQTEwpICE9IGRwbGwgJiYgYWx0LT5xY19hY3RpdmUpCisJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBocHQzeDJuX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV90YXNrZmlsZSAqdGYgPSAmcWMtPnRmOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJaW50IGZsYWdzID0gKGxvbmcpYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlpbnQgZHBsbCA9IGhwdDN4Mm5fdXNlX2RwbGwoYXAsIHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CiAKLQlpZiAoaHB0M3gybl9wYWlyX2lkbGUoYXApKSB7Ci0JCWludCBkcGxsID0gaHB0M3gybl91c2VfZHBsbChhcCwgKHRmLT5mbGFncyAmIEFUQV9URkxBR19XUklURSkpOwotCQlpZiAoKGZsYWdzICYgVVNFX0RQTEwpICE9IGRwbGwpIHsKLQkJCWlmIChkcGxsID09IDEpCi0JCQkJaHB0M3gybl9zZXRfY2xvY2soYXAsIDB4MjEpOwotCQkJZWxzZQotCQkJCWhwdDN4Mm5fc2V0X2Nsb2NrKGFwLCAweDIzKTsKLQkJfQorCWlmICgoZmxhZ3MgJiBVU0VfRFBMTCkgIT0gZHBsbCkgeworCQlmbGFncyAmPSB+VVNFX0RQTEw7CisJCWZsYWdzIHw9IGRwbGw7CisJCWFwLT5ob3N0LT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKShsb25nKWZsYWdzOworCisJCWhwdDN4Mm5fc2V0X2Nsb2NrKGFwLCBkcGxsID8gMHgyMSA6IDB4MjMpOwogCX0KIAlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CkBAIC0zMzksNiArMzQzLDggQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCiAJLmJtZG1hX3N0b3AJPSBocHQzeDJuX2JtZG1hX3N0b3AsCisKKwkucWNfZGVmZXIJPSBocHQzeDJuX3FjX2RlZmVyLAogCS5xY19pc3N1ZQk9IGhwdDN4Mm5fcWNfaXNzdWUsCiAKIAkuY2FibGVfZGV0ZWN0CT0gaHB0M3gybl9jYWJsZV9kZXRlY3QsCkBAIC00NTQsNyArNDYwLDcgQEAKIAl1bnNpZ25lZCBpbnQgZl9sb3csIGZfaGlnaDsKIAlpbnQgYWRqdXN0OwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7Ci0Jdm9pZCAqaHByaXYgPSBOVUxMOworCXZvaWQgKmhwcml2ID0gKHZvaWQgKilVU0VfRFBMTDsKIAlpbnQgcmM7CiAKIAlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShkZXYpOwpAQCAtNTM5LDcgKzU0NSw3IEBACiAJLyogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncyBzbyB3ZSB1c2UKIAkgICBpdCBkaXJlY3RseSAqLwogCWlmIChwY2lfbWh6ID4gNjApIHsKLQkJaHByaXYgPSAodm9pZCAqKVBDSTY2OworCQlocHJpdiA9ICh2b2lkICopKFBDSTY2IHwgVVNFX0RQTEwpOwogCQkvKgogCQkgKiBPbiAgSFBUMzcxTiwgaWYgQVRBIGNsb2NrIGlzIDY2IE1IeiB3ZSBtdXN0IHNldCBiaXQgMiBpbgogCQkgKiB0aGUgTUlTQy4gcmVnaXN0ZXIgdG8gc3RyZXRjaCB0aGUgVWx0cmFETUEgVHNzIHRpbWluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCmluZGV4IGQ2ZjY5NTYuLjM3ZWY0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwpAQCAtODUzLDcgKzg1Myw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQljczEgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCByZXNfY3MxLT5zdGFydCwKLQkJCQkJICAgcmVzX2NzMC0+ZW5kIC0gcmVzX2NzMS0+c3RhcnQgKyAxKTsKKwkJCQkJICAgcmVzb3VyY2Vfc2l6ZShyZXNfY3MxKSk7CiAKIAkJaWYgKCFjczEpCiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCBhOGE3YmUwLi5kZjhlZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgpAQCAtNTM4LDYgKzUzOSw3IEBACiAKIHN0cnVjdCBtdl9ob3N0X3ByaXYgewogCXUzMgkJCWhwX2ZsYWdzOworCXVuc2lnbmVkIGludCAJCWJvYXJkX2lkeDsKIAl1MzIJCQltYWluX2lycV9tYXNrOwogCXN0cnVjdCBtdl9wb3J0X3NpZ25hbAlzaWduYWxbOF07CiAJY29uc3Qgc3RydWN0IG12X2h3X29wcwkqb3BzOwpAQCAtNTQ4LDYgKzU1MCwxMCBAQAogCXUzMgkJCWlycV9jYXVzZV9vZmZzZXQ7CiAJdTMyCQkJaXJxX21hc2tfb2Zmc2V0OwogCXUzMgkJCXVubWFza19hbGxfaXJxczsKKworI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCXN0cnVjdCBjbGsJCSpjbGs7CisjZW5kaWYKIAkvKgogCSAqIFRoZXNlIGNvbnNpc3RlbnQgRE1BIG1lbW9yeSBwb29scyBnaXZlIHVzIGd1YXJhbnRlZWQKIAkgKiBhbGlnbm1lbnQgZm9yIGhhcmR3YXJlLWFjY2Vzc2VkIGRhdGEgc3RydWN0dXJlcywKQEAgLTI3NzUsNyArMjc4MSw3IEBACiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHA7CiAJaW50IGVkbWFfd2FzX2VuYWJsZWQ7CiAKLQlpZiAoIWFwIHx8IChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpIHsKKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpIHsKIAkJbXZfdW5leHBlY3RlZF9pbnRyKGFwLCAwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMzOTMsNyArMzM5OSw3IEBACiAJWkVSTygweDAyNCk7CQkvKiByZXNwcSBvdXRwICovCiAJWkVSTygweDAyMCk7CQkvKiByZXNwcSBpbnAgKi8KIAlaRVJPKDB4MDJjKTsJCS8qIHRlc3QgY29udHJvbCAqLwotCXdyaXRlbCgweGJjLCBwb3J0X21taW8gKyBFRE1BX0lPUkRZX1RNT1VUKTsKKwl3cml0ZWwoMHg4MDAsIHBvcnRfbW1pbyArIEVETUFfSU9SRFlfVE1PVVQpOwogfQogCiAjdW5kZWYgWkVSTwpAQCAtMzg1NCw3ICszODYwLDYgQEAKIC8qKgogICogICAgICBtdl9pbml0X2hvc3QgLSBQZXJmb3JtIHNvbWUgZWFybHkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhvc3QuCiAgKglAaG9zdDogQVRBIGhvc3QgdG8gaW5pdGlhbGl6ZQotICogICAgICBAYm9hcmRfaWR4OiBjb250cm9sbGVyIGluZGV4CiAgKgogICogICAgICBJZiBwb3NzaWJsZSwgZG8gYW4gZWFybHkgZ2xvYmFsIHJlc2V0IG9mIHRoZSBob3N0LiAgVGhlbiBkbwogICogICAgICBvdXIgcG9ydCBpbml0IGFuZCBjbGVhci91bm1hc2sgYWxsL3JlbGV2YW50IGhvc3QgaW50ZXJydXB0cy4KQEAgLTM4NjIsMTMgKzM4NjcsMTMgQEAKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgaW50IG12X2luaXRfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBib2FyZF9pZHgpCitzdGF0aWMgaW50IG12X2luaXRfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCiB7CiAJaW50IHJjID0gMCwgbl9oYywgcG9ydCwgaGM7CiAJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2U7CiAKLQlyYyA9IG12X2NoaXBfaWQoaG9zdCwgYm9hcmRfaWR4KTsKKwlyYyA9IG12X2NoaXBfaWQoaG9zdCwgaHByaXYtPmJvYXJkX2lkeCk7CiAJaWYgKHJjKQogCQlnb3RvIGRvbmU7CiAKQEAgLTM5MDUsMTQgKzM5MTAsNiBAQAogCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X3BvcnRfYmFzZShtbWlvLCBwb3J0KTsKIAogCQltdl9wb3J0X2luaXQoJmFwLT5pb2FkZHIsIHBvcnRfbW1pbyk7Ci0KLSNpZmRlZiBDT05GSUdfUENJCi0JCWlmICghSVNfU09DKGhwcml2KSkgewotCQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHBvcnRfbW1pbyAtIG1taW87Ci0JCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1WX1BSSU1BUllfQkFSLCAtMSwgIm1taW8iKTsKLQkJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgTVZfUFJJTUFSWV9CQVIsIG9mZnNldCwgInBvcnQiKTsKLQkJfQotI2VuZGlmCiAJfQogCiAJZm9yIChoYyA9IDA7IGhjIDwgbl9oYzsgaGMrKykgewpAQCAtNDAzNSwxMiArNDAzMiwyMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlob3N0LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKIAlocHJpdi0+bl9wb3J0cyA9IG5fcG9ydHM7CisJaHByaXYtPmJvYXJkX2lkeCA9IGNoaXBfc29jOwogCiAJaG9zdC0+aW9tYXAgPSBOVUxMOwogCWhwcml2LT5iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCiAJCQkJICAgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlocHJpdi0+YmFzZSAtPSBTQVRBSEMwX1JFR19CQVNFOwogCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJaHByaXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihocHJpdi0+Y2xrKSkKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbGtkZXZcbiIpOworCWVsc2UKKwkJY2xrX2VuYWJsZShocHJpdi0+Y2xrKTsKKyNlbmRpZgorCiAJLyoKIAkgKiAoUmUtKXByb2dyYW0gTUJVUyByZW1hcHBpbmcgd2luZG93cyBpZiB3ZSBhcmUgYXNrZWQgdG8uCiAJICovCkBAIC00MDQ5LDEyICs0MDU1LDEyIEBACiAKIAlyYyA9IG12X2NyZWF0ZV9kbWFfcG9vbHMoaHByaXYsICZwZGV2LT5kZXYpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOworCQlnb3RvIGVycjsKIAogCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwotCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QsIGNoaXBfc29jKTsKKwlyYyA9IG12X2luaXRfaG9zdChob3N0KTsKIAlpZiAocmMpCi0JCXJldHVybiByYzsKKwkJZ290byBlcnI7CiAKIAlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKIAkJICAgInNsb3RzICV1IHBvcnRzICVkXG4iLCAodW5zaWduZWQpTVZfTUFYX1FfREVQVEgsCkBAIC00MDYyLDYgKzQwNjgsMTUgQEAKIAogCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBtdl9pbnRlcnJ1cHQsCiAJCQkJIElSUUZfU0hBUkVELCAmbXY2X3NodCk7CitlcnI6CisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJaWYgKCFJU19FUlIoaHByaXYtPmNsaykpIHsKKwkJY2xrX2Rpc2FibGUoaHByaXYtPmNsayk7CisJCWNsa19wdXQoaHByaXYtPmNsayk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCkBAIC00MDc2LDE0ICs0MDkxLDY2IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQorI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworI2VuZGlmCiAJYXRhX2hvc3RfZGV0YWNoKGhvc3QpOworCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJaWYgKCFJU19FUlIoaHByaXYtPmNsaykpIHsKKwkJY2xrX2Rpc2FibGUoaHByaXYtPmNsayk7CisJCWNsa19wdXQoaHByaXYtPmNsayk7CisJfQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXZfcGxhdGZvcm1fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWlmIChob3N0KQorCQlyZXR1cm4gYXRhX2hvc3Rfc3VzcGVuZChob3N0LCBzdGF0ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdl9wbGF0Zm9ybV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaW50IHJldDsKKworCWlmIChob3N0KSB7CisJCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCQljb25zdCBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhICptdl9wbGF0Zm9ybV9kYXRhID0gXAorCQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCS8qCisJCSAqIChSZS0pcHJvZ3JhbSBNQlVTIHJlbWFwcGluZyB3aW5kb3dzIGlmIHdlIGFyZSBhc2tlZCB0by4KKwkJICovCisJCWlmIChtdl9wbGF0Zm9ybV9kYXRhLT5kcmFtICE9IE5VTEwpCisJCQltdl9jb25mX21idXNfd2luZG93cyhocHJpdiwgbXZfcGxhdGZvcm1fZGF0YS0+ZHJhbSk7CisKKwkJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCisJCXJldCA9IG12X2luaXRfaG9zdChob3N0KTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEVycm9yIGR1cmluZyBIVyBpbml0XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgbXZfcGxhdGZvcm1fc3VzcGVuZCBOVUxMCisjZGVmaW5lIG12X3BsYXRmb3JtX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZfcGxhdGZvcm1fZHJpdmVyID0gewogCS5wcm9iZQkJCT0gbXZfcGxhdGZvcm1fcHJvYmUsCiAJLnJlbW92ZQkJCT0gX19kZXZleGl0X3AobXZfcGxhdGZvcm1fcmVtb3ZlKSwKKwkuc3VzcGVuZAkJPSBtdl9wbGF0Zm9ybV9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IG12X3BsYXRmb3JtX3Jlc3VtZSwKIAkuZHJpdmVyCQkJPSB7CiAJCQkJICAgLm5hbWUgPSBEUlZfTkFNRSwKIAkJCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTQwOTQsNiArNDE2MSw5IEBACiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBtdl9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXZfcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworI2VuZGlmCiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG12X3BjaV9kcml2ZXIgPSB7CkBAIC00MTAxLDYgKzQxNzEsMTEgQEAKIAkuaWRfdGFibGUJCT0gbXZfcGNpX3RibCwKIAkucHJvYmUJCQk9IG12X3BjaV9pbml0X29uZSwKIAkucmVtb3ZlCQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJCT0gYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBtdl9wY2lfZGV2aWNlX3Jlc3VtZSwKKyNlbmRpZgorCiB9OwogCiAvKiBtb3ZlIHRvIFBDSSBsYXllciBvciBsaWJhdGEgY29yZT8gKi8KQEAgLTQxOTQsNyArNDI2OSw3IEBACiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmbXZfcG9ydF9pbmZvW2JvYXJkX2lkeF0sIE5VTEwgfTsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXY7Ci0JaW50IG5fcG9ydHMsIHJjOworCWludCBuX3BvcnRzLCBwb3J0LCByYzsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwpAQCAtNDIwOCw2ICs0MjgzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CiAJaHByaXYtPm5fcG9ydHMgPSBuX3BvcnRzOworCWhwcml2LT5ib2FyZF9pZHggPSBib2FyZF9pZHg7CiAKIAkvKiBhY3F1aXJlIHJlc291cmNlcyAqLwogCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDIzMCw4ICs0MzA2LDE3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaG9zdC0+bl9wb3J0czsgcG9ydCsrKSB7CisJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9wb3J0X2Jhc2UoaHByaXYtPmJhc2UsIHBvcnQpOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcG9ydF9tbWlvIC0gaHByaXYtPmJhc2U7CisKKwkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgLTEsICJtbWlvIik7CisJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgTVZfUFJJTUFSWV9CQVIsIG9mZnNldCwgInBvcnQiKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KLQlyYyA9IG12X2luaXRfaG9zdChob3N0LCBib2FyZF9pZHgpOworCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC00MjQ3LDYgKzQzMzIsMjcgQEAKIAlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBtdl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSBJU19HRU5fSShocHJpdikgPyAmbXY1X3NodCA6ICZtdjZfc2h0KTsKIH0KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl9wY2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaW50IHJjOworCisJcmMgPSBhdGFfcGNpX2RldmljZV9kb19yZXN1bWUocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KKwlyYyA9IG12X2luaXRfaG9zdChob3N0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCiAjZW5kaWYKIAogc3RhdGljIGludCBtdl9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA2M2MxNDNlLi5jMGM1YTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC03MDMsOSArNzAzLDkgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVnaXN0ZXI6CisJa29iamVjdF9wdXQoJnByaXYtPmtvYmopOwogCWtmcmVlKGRydi0+cCk7CiAJZHJ2LT5wID0gTlVMTDsKLQlrb2JqZWN0X3B1dCgmcHJpdi0+a29iaik7CiBvdXRfcHV0X2J1czoKIAlidXNfcHV0KGJ1cyk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggZjEyOTBjYi4uMjgyMDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC00NDYsNyArNDQ2LDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLWludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKK2ludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaW50IGVycm9yID0gMDsKIAlpZiAoZGV2KQpAQCAtNDU5LDcgKzQ2MCw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRldikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRldi0+a29iaiwgJmF0dHItPmF0dHIpOwpAQCAtNDcwLDcgKzQ3Miw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGJpbmFyeSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotaW50IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKK2ludCBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCWludCBlcnJvciA9IC1FSU5WQUw7CiAJaWYgKGRldikKQEAgLTQ4NCw3ICs0ODcsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBiaW5hcnkgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLXZvaWQgZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQordm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpZiAoZGV2KQogCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+a29iaiwgYXR0cik7CkBAIC05MDUsOCArOTA5LDEwIEBACiAJCWRldi0+aW5pdF9uYW1lID0gTlVMTDsKIAl9CiAKLQlpZiAoIWRldl9uYW1lKGRldikpCisJaWYgKCFkZXZfbmFtZShkZXYpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBuYW1lX2Vycm9yOworCX0KIAogCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXZfbmFtZShkZXYpLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKaW5kZXggNTAzNzViYi4uMDkwZGQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHN0YXRpYyBpbnQgZGV2X21vdW50OwogI2VuZGlmCiAKLXN0YXRpYyByd2xvY2tfdCBkaXJsb2NrOworc3RhdGljIERFRklORV9NVVRFWChkaXJsb2NrKTsKIAogc3RhdGljIGludCBfX2luaXQgbW91bnRfcGFyYW0oY2hhciAqc3RyKQogewpAQCAtOTMsNyArOTMsNyBAQAogewogCWludCBlcnI7CiAKLQlyZWFkX2xvY2soJmRpcmxvY2spOworCW11dGV4X2xvY2soJmRpcmxvY2spOwogCWVyciA9IGRldl9ta2Rpcihub2RlcGF0aCwgMDc1NSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCWNoYXIgKnBhdGg7CkBAIC0xMDEsOCArMTAxLDEwIEBACiAKIAkJLyogcGFyZW50IGRpcmVjdG9yaWVzIGRvIG5vdCBleGlzdCwgY3JlYXRlIHRoZW0gKi8KIAkJcGF0aCA9IGtzdHJkdXAobm9kZXBhdGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBhdGgpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKCFwYXRoKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KIAkJcyA9IHBhdGg7CiAJCWZvciAoOzspIHsKIAkJCXMgPSBzdHJjaHIocywgJy8nKTsKQEAgLTExNyw3ICsxMTksOCBAQAogCQl9CiAJCWtmcmVlKHBhdGgpOwogCX0KLQlyZWFkX3VubG9jaygmZGlybG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkaXJsb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jd3JpdGVfbG9jaygmZGlybG9jayk7CisJbXV0ZXhfbG9jaygmZGlybG9jayk7CiAJZm9yICg7OykgewogCQljaGFyICpiYXNlOwogCkBAIC0yNDEsNyArMjQ0LDcgQEAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KLQl3cml0ZV91bmxvY2soJmRpcmxvY2spOworCW11dGV4X3VubG9jaygmZGlybG9jayk7CiAKIAlrZnJlZShwYXRoKTsKIAlyZXR1cm4gZXJyOwpAQCAtMzUyLDggKzM1NSw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAotCXJ3bG9ja19pbml0KCZkaXJsb2NrKTsKLQogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRldl9mc190eXBlKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2dG1wZnM6IHVuYWJsZSB0byByZWdpc3RlciBkZXZ0bXBmcyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZjM2Nzg4NS4uOTBjOWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtOTgsNyArOTgsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAotCQkgICAgICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3I7CiAJaWYgKGRydikKQEAgLTExNSw3ICsxMTUsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKLQkJCXN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQorCQkJY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRydikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRydi0+cC0+a29iaiwgJmF0dHItPmF0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGM0YzhmMmUuLmQ3ZDc3ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTYzLDYgKzYzLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKTsKIAorc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKG1lbW9yeV9pc29sYXRlX2NoYWluKTsKKworaW50IHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbWVtb3J5X2lzb2xhdGVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIpOworCit2b2lkIHVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbWVtb3J5X2lzb2xhdGVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcik7CisKIC8qCiAgKiByZWdpc3Rlcl9tZW1vcnkgLSBTZXR1cCBhIHN5c2ZzIGRldmljZSBmb3IgYSBtZW1vcnkgYmxvY2sKICAqLwpAQCAtMTU3LDYgKzE3MSwxMSBAQAogCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtZW1vcnlfY2hhaW4sIHZhbCwgdik7CiB9CiAKK2ludCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZtZW1vcnlfaXNvbGF0ZV9jaGFpbiwgdmFsLCB2KTsKK30KKwogLyoKICAqIE1FTU9SWV9IT1RQTFVHIGRlcGVuZHMgb24gU1BBUlNFTUVNIGluIG1tL0tjb25maWcsIHNvIGl0IGlzCiAgKiBPSyB0byBoYXZlIGRpcmVjdCByZWZlcmVuY2VzIHRvIHNwYXJzZW1lbSB2YXJpYWJsZXMgaW4gaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggOWQyZWUyNS4uNThlZmFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTQ0MSw2ICs0NDEsNyBAQAogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKTsKIAogc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDFhMjE2YzEuLjQ4YWRmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMTYxLDYgKzE2MSwzMiBAQAogCWxpc3RfbW92ZV90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xpc3QpOwogfQogCitzdGF0aWMga3RpbWVfdCBpbml0Y2FsbF9kZWJ1Z19zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJa3RpbWVfdCBjYWxsdGltZSA9IGt0aW1lX3NldCgwLCAwKTsKKworCWlmIChpbml0Y2FsbF9kZWJ1ZykgeworCQlwcl9pbmZvKCJjYWxsaW5nICAlcysgQCAlaVxuIiwKKwkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CisJfQorCisJcmV0dXJuIGNhbGx0aW1lOworfQorCitzdGF0aWMgdm9pZCBpbml0Y2FsbF9kZWJ1Z19yZXBvcnQoc3RydWN0IGRldmljZSAqZGV2LCBrdGltZV90IGNhbGx0aW1lLAorCQkJCSAgaW50IGVycm9yKQoreworCWt0aW1lX3QgZGVsdGEsIHJldHRpbWU7CisKKwlpZiAoaW5pdGNhbGxfZGVidWcpIHsKKwkJcmV0dGltZSA9IGt0aW1lX2dldCgpOworCQlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7CisJCXByX2luZm8oImNhbGwgJXMrIHJldHVybmVkICVkIGFmdGVyICVMZCB1c2Vjc1xuIiwgZGV2X25hbWUoZGV2KSwKKwkJCWVycm9yLCAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMCk7CisJfQorfQorCiAvKioKICAqIHBtX29wIC0gRXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcHJpYXRlIGZvciBnaXZlbiBQTSBldmVudC4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCkBAIC0xNzIsMTMgKzE5OCw5IEBACiAJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yID0gMDsKLQlrdGltZV90IGNhbGx0aW1lLCBkZWx0YSwgcmV0dGltZTsKKwlrdGltZV90IGNhbGx0aW1lOwogCi0JaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCXByX2luZm8oImNhbGxpbmcgICVzKyBAICVpXG4iLAotCQkJCWRldl9uYW1lKGRldiksIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKLQl9CisJY2FsbHRpbWUgPSBpbml0Y2FsbF9kZWJ1Z19zdGFydChkZXYpOwogCiAJc3dpdGNoIChzdGF0ZS5ldmVudCkgewogI2lmZGVmIENPTkZJR19TVVNQRU5ECkBAIC0yMjcsMTIgKzI0OSw3IEBACiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcmV0dGltZSA9IGt0aW1lX2dldCgpOwotCQlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7Ci0JCXByX2luZm8oImNhbGwgJXMrIHJldHVybmVkICVkIGFmdGVyICVMZCB1c2Vjc1xuIiwgZGV2X25hbWUoZGV2KSwKLQkJCWVycm9yLCAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMCk7Ci0JfQorCWluaXRjYWxsX2RlYnVnX3JlcG9ydChkZXYsIGNhbGx0aW1lLCBlcnJvcik7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0zMDksOCArMzI2LDkgQEAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKIAkJcmV0dGltZSA9IGt0aW1lX2dldCgpOwogCQlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7Ci0JCXByaW50aygiaW5pdGNhbGwgJXNfaSsgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIHVzZWNzXG4iLCBkZXZfbmFtZShkZXYpLAotCQkJZXJyb3IsICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKKwkJcHJpbnRrKCJpbml0Y2FsbCAlc19pKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsCisJCQlkZXZfbmFtZShkZXYpLCBlcnJvciwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0zNTQsNiArMzcyLDIzIEBACiAJCWtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSwgcG1fdmVyYihzdGF0ZS5ldmVudCksIGluZm8sIGVycm9yKTsKIH0KIAorc3RhdGljIHZvaWQgZHBtX3Nob3dfdGltZShrdGltZV90IHN0YXJ0dGltZSwgcG1fbWVzc2FnZV90IHN0YXRlLCBjaGFyICppbmZvKQoreworCWt0aW1lX3QgY2FsbHRpbWU7CisJczY0IHVzZWNzNjQ7CisJaW50IHVzZWNzOworCisJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKKwl1c2VjczY0ID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGNhbGx0aW1lLCBzdGFydHRpbWUpKTsKKwlkb19kaXYodXNlY3M2NCwgTlNFQ19QRVJfVVNFQyk7CisJdXNlY3MgPSB1c2VjczY0OworCWlmICh1c2VjcyA9PSAwKQorCQl1c2VjcyA9IDE7CisJcHJfaW5mbygiUE06ICVzJXMlcyBvZiBkZXZpY2VzIGNvbXBsZXRlIGFmdGVyICVsZC4lMDNsZCBtc2Vjc1xuIiwKKwkJaW5mbyA/OiAiIiwgaW5mbyA/ICIgIiA6ICIiLCBwbV92ZXJiKHN0YXRlLmV2ZW50KSwKKwkJdXNlY3MgLyBVU0VDX1BFUl9NU0VDLCB1c2VjcyAlIFVTRUNfUEVSX01TRUMpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzdW1lIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKQEAgLTM5MCw2ICs0MjUsNyBAQAogdm9pZCBkcG1fcmVzdW1lX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJdHJhbnNpdGlvbl9zdGFydGVkID0gZmFsc2U7CkBAIC00MDMsMTEgKzQzOSwzMiBAQAogCQkJCXBtX2Rldl9lcnIoZGV2LCBzdGF0ZSwgIiBlYXJseSIsIGVycm9yKTsKIAkJfQogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsICJlYXJseSIpOwogCXJlc3VtZV9kZXZpY2VfaXJxcygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHBtX3Jlc3VtZV9ub2lycSk7CiAKIC8qKgorICogbGVnYWN5X3Jlc3VtZSAtIEV4ZWN1dGUgYSBsZWdhY3kgKGJ1cyBvciBjbGFzcykgcmVzdW1lIGNhbGxiYWNrIGZvciBkZXZpY2UuCisgKiBkZXY6IERldmljZSB0byByZXN1bWUuCisgKiBjYjogUmVzdW1lIGNhbGxiYWNrIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyBpbnQgbGVnYWN5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCAoKmNiKShzdHJ1Y3QgZGV2aWNlICpkZXYpKQoreworCWludCBlcnJvcjsKKwlrdGltZV90IGNhbGx0aW1lOworCisJY2FsbHRpbWUgPSBpbml0Y2FsbF9kZWJ1Z19zdGFydChkZXYpOworCisJZXJyb3IgPSBjYihkZXYpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChjYiwgZXJyb3IpOworCisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCiAgKiBkZXZpY2VfcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTQyNyw3ICs0ODQsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+YnVzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+YnVzLT5yZXN1bWUpIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImxlZ2FjeSAiKTsKLQkJCWVycm9yID0gZGV2LT5idXMtPnJlc3VtZShkZXYpOworCQkJZXJyb3IgPSBsZWdhY3lfcmVzdW1lKGRldiwgZGV2LT5idXMtPnJlc3VtZSk7CiAJCX0KIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmQ7CkBAIC00NDgsNyArNTA1LDcgQEAKIAkJCWVycm9yID0gcG1fb3AoZGV2LCBkZXYtPmNsYXNzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+Y2xhc3MtPnJlc3VtZSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5IGNsYXNzICIpOwotCQkJZXJyb3IgPSBkZXYtPmNsYXNzLT5yZXN1bWUoZGV2KTsKKwkJCWVycm9yID0gbGVnYWN5X3Jlc3VtZShkZXYsIGRldi0+Y2xhc3MtPnJlc3VtZSk7CiAJCX0KIAl9CiAgRW5kOgpAQCAtNDY4LDYgKzUyNSw3IEBACiBzdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwpAQCAtNDk2LDYgKzU1NCw3IEBACiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogfQogCiAvKioKQEAgLTU0OCw3ICs2MDcsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCiAJCQlkZXZpY2VfY29tcGxldGUoZGV2LCBzdGF0ZSk7Ci0JCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAogCQkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJfQpAQCAtNjI4LDYgKzY4Nyw3IEBACiBpbnQgZHBtX3N1c3BlbmRfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCWludCBlcnJvciA9IDA7CiAKIAlzdXNwZW5kX2RldmljZV9pcnFzKCk7CkBAIC02NDMsMTEgKzcwMywzNCBAQAogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAlpZiAoZXJyb3IpCiAJCWRwbV9yZXN1bWVfbm9pcnEocmVzdW1lX2V2ZW50KHN0YXRlKSk7CisJZWxzZQorCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsICJsYXRlIik7CiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHBtX3N1c3BlbmRfbm9pcnEpOwogCiAvKioKKyAqIGxlZ2FjeV9zdXNwZW5kIC0gRXhlY3V0ZSBhIGxlZ2FjeSAoYnVzIG9yIGNsYXNzKSBzdXNwZW5kIGNhbGxiYWNrIGZvciBkZXZpY2UuCisgKiBkZXY6IERldmljZSB0byBzdXNwZW5kLgorICogY2I6IFN1c3BlbmQgY2FsbGJhY2sgdG8gZXhlY3V0ZS4KKyAqLworc3RhdGljIGludCBsZWdhY3lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwKKwkJCSAgaW50ICgqY2IpKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKSkKK3sKKwlpbnQgZXJyb3I7CisJa3RpbWVfdCBjYWxsdGltZTsKKworCWNhbGx0aW1lID0gaW5pdGNhbGxfZGVidWdfc3RhcnQoZGV2KTsKKworCWVycm9yID0gY2IoZGV2LCBzdGF0ZSk7CisJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGNiLCBlcnJvcik7CisKKwlpbml0Y2FsbF9kZWJ1Z19yZXBvcnQoZGV2LCBjYWxsdGltZSwgZXJyb3IpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGRldmljZV9zdXNwZW5kIC0gRXhlY3V0ZSAic3VzcGVuZCIgY2FsbGJhY2tzIGZvciBnaXZlbiBkZXZpY2UuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCkBAIC02NjQsOCArNzQ3LDcgQEAKIAkJCWVycm9yID0gcG1fb3AoZGV2LCBkZXYtPmNsYXNzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+Y2xhc3MtPnN1c3BlbmQpIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImxlZ2FjeSBjbGFzcyAiKTsKLQkJCWVycm9yID0gZGV2LT5jbGFzcy0+c3VzcGVuZChkZXYsIHN0YXRlKTsKLQkJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYtPmNsYXNzLT5zdXNwZW5kLCBlcnJvcik7CisJCQllcnJvciA9IGxlZ2FjeV9zdXNwZW5kKGRldiwgc3RhdGUsIGRldi0+Y2xhc3MtPnN1c3BlbmQpOwogCQl9CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gRW5kOwpAQCAtNjg2LDggKzc2OCw3IEBACiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5idXMtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5idXMtPnN1c3BlbmQpIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImxlZ2FjeSAiKTsKLQkJCWVycm9yID0gZGV2LT5idXMtPnN1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0JCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LT5idXMtPnN1c3BlbmQsIGVycm9yKTsKKwkJCWVycm9yID0gbGVnYWN5X3N1c3BlbmQoZGV2LCBzdGF0ZSwgZGV2LT5idXMtPnN1c3BlbmQpOwogCQl9CiAJfQogIEVuZDoKQEAgLTcwMyw2ICs3ODQsNyBAQAogc3RhdGljIGludCBkcG1fc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAJaW50IGVycm9yID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKQEAgLTcyOCw2ICs4MTAsOCBAQAogCX0KIAlsaXN0X3NwbGljZSgmbGlzdCwgZHBtX2xpc3QucHJldik7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWlmICghZXJyb3IpCisJCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgTlVMTCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC03OTYsNyArODgwLDcgQEAKIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKIAkJaWYgKHBtX3J1bnRpbWVfYmFycmllcihkZXYpICYmIGRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKIAkJCS8qIFdha2UtdXAgcmVxdWVzdGVkIGR1cmluZyBzeXN0ZW0gc2xlZXAgdHJhbnNpdGlvbi4gKi8KLQkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCQkJZXJyb3IgPSAtRUJVU1k7CiAJCX0gZWxzZSB7CiAJCQllcnJvciA9IGRldmljZV9wcmVwYXJlKGRldiwgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggNDBkNzcyMC4uZjhiMDQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC04NSw2ICs4NSwxOSBAQAogCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfaWRsZShkZXYpOwogCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSAmJiBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX2lkbGUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCWRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJfSBlbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtCisJICAgICYmIGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX2lkbGUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCWRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCX0KIAogCWRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24gPSBmYWxzZTsKQEAgLTE5NCw2ICsyMDcsMjIgQEAKIAogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbQorCSAgICAmJiBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3N1c3BlbmQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+cG0KKwkgICAgJiYgZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfc3VzcGVuZCkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcmV0dmFsID0gZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKIAl9IGVsc2UgewogCQlyZXR2YWwgPSAtRU5PU1lTOwogCX0KQEAgLTM1OSw2ICszODgsMjIgQEAKIAogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbQorCSAgICAmJiBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3Jlc3VtZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcmV0dmFsID0gZGV2LT50eXBlLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtCisJICAgICYmIGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3Jlc3VtZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcmV0dmFsID0gZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IC1FTk9TWVM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggNGQyOTA1OS4uYTY5OWYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0zMDcsNiArMzA3LDcgQEAKIAkJcmV0dXJuOwogCiAJdXNiX2FuY2hvcl91cmIodXJiLCAmZGF0YS0+YnVsa19hbmNob3IpOworCXVzYl9tYXJrX2xhc3RfYnVzeShkYXRhLT51ZGV2KTsKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBkMzQwMGIyLi43ZDczY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1OCB1cGRhdGVfZmxvd19jb250cm9sOwogCXN0cnVjdCBjdHJsX3VsIGN0cmxfdWw7CiAJc3RydWN0IGN0cmxfZGwgY3RybF9kbDsKLQlzdHJ1Y3Qga2ZpZm8gKmZpZm9fdWw7CisJc3RydWN0IGtmaWZvIGZpZm9fdWw7CiAJdm9pZCBfX2lvbWVtICpkbF9hZGRyWzJdOwogCXUzMiBkbF9zaXplWzJdOwogCXU4IHRvZ2dsZV9kbDsKQEAgLTY4NSw4ICs2ODUsNiBAQAogCQlkdW1wX3RhYmxlKGRjKTsKIAogCQlmb3IgKGkgPSBQT1JUX01ETTsgaSA8IE1BWF9QT1JUOyBpKyspIHsKLQkJCWRjLT5wb3J0W2ldLmZpZm9fdWwgPQotCQkJICAgIGtmaWZvX2FsbG9jKEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMsIE5VTEwpOwogCQkJbWVtc2V0KCZkYy0+cG9ydFtpXS5jdHJsX2RsLCAwLCBzaXplb2Yoc3RydWN0IGN0cmxfZGwpKTsKIAkJCW1lbXNldCgmZGMtPnBvcnRbaV0uY3RybF91bCwgMCwgc2l6ZW9mKHN0cnVjdCBjdHJsX3VsKSk7CiAJCX0KQEAgLTc5OCw3ICs3OTYsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCS8qIEdldCBkYXRhIGZyb20gdHR5IGFuZCBwbGFjZSBpbiBidWYgZm9yIG5vdyAqLwotCXNpemUgPSBfX2tmaWZvX2dldChwb3J0LT5maWZvX3VsLCBkYy0+c2VuZF9idWYsCisJc2l6ZSA9IGtmaWZvX291dCgmcG9ydC0+Zmlmb191bCwgZGMtPnNlbmRfYnVmLAogCQkJICAgdWxfc2l6ZSA8IFNFTkRfQlVGX01BWCA/IHVsX3NpemUgOiBTRU5EX0JVRl9NQVgpOwogCiAJaWYgKHNpemUgPT0gMCkgewpAQCAtOTg4LDExICs5ODYsMTEgQEAKIAogCX0gZWxzZSBpZiAob2xkX2N0cmwuQ1RTID09IDAgJiYgY3RybF9kbC5DVFMgPT0gMSkgewogCi0JCWlmIChfX2tmaWZvX2xlbihkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgeworCQlpZiAoa2ZpZm9fbGVuKCZkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgewogCQkJREJHMSgiRW5hYmxlIGludGVycnVwdCAoMHglMDRYKSBvbiBwb3J0OiAlZCIsCiAJCQkJZW5hYmxlX2llciwgcG9ydCk7CiAJCQlEQkcxKCJEYXRhIGluIGJ1ZmZlciBbJWRdLCBlbmFibGUgdHJhbnNtaXQhICIsCi0JCQkJX19rZmlmb19sZW4oZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOworCQkJCWtmaWZvX2xlbigmZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOwogCQkJZW5hYmxlX3RyYW5zbWl0X3VsKHBvcnQsIGRjKTsKIAkJfSBlbHNlIHsKIAkJCURCRzEoIk5vIGRhdGEgaW4gYnVmZmVyLi4uIik7CkBAIC0xNDMzLDYgKzE0MzEsMTYgQEAKIAkJZ290byBlcnJfZnJlZV9zYnVmOwogCX0KIAorCWZvciAoaSA9IFBPUlRfTURNOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlpZiAoa2ZpZm9fYWxsb2MoJmRjLT5wb3J0W2ldLmZpZm9fdWwsCisJCSAgICAgIEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJDb3VsZCBub3QgYWxsb2NhdGUga2ZpZm8gYnVmZmVyXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlX2tmaWZvOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmRjLT5zcGluX211dGV4KTsKIAogCW5vem9taV9zZXR1cF9wcml2YXRlX2RhdGEoZGMpOwpAQCAtMTQ0NSw3ICsxNDUzLDcgQEAKIAkJCU5PWk9NSV9OQU1FLCBkYyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIHBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2J1ZjsKKwkJZ290byBlcnJfZnJlZV9rZmlmbzsKIAl9CiAKIAlEQkcxKCJiYXNlX2FkZHI6ICVwIiwgZGMtPmJhc2VfYWRkcik7CkBAIC0xNDY0LDEzICsxNDcyLDI4IEBACiAJZGMtPnN0YXRlID0gTk9aT01JX1NUQVRFX0VOQUJMRUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OworCiAJCW11dGV4X2luaXQoJmRjLT5wb3J0W2ldLnR0eV9zZW0pOwogCQl0dHlfcG9ydF9pbml0KCZkYy0+cG9ydFtpXS5wb3J0KTsKLQkJdHR5X3JlZ2lzdGVyX2RldmljZShudHR5X2RyaXZlciwgZGMtPmluZGV4X3N0YXJ0ICsgaSwKKwkJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGRjLT5pbmRleF9zdGFydCArIGksCiAJCQkJCQkJJnBkZXYtPmRldik7CisKKwkJaWYgKElTX0VSUih0dHlfZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUih0dHlfZGV2KTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0dHk/XG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfdHR5OworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9mcmVlX3R0eToKKwlmb3IgKGkgPSBkYy0+aW5kZXhfc3RhcnQ7IGkgPCBkYy0+aW5kZXhfc3RhcnQgKyBNQVhfUE9SVDsgKytpKQorCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGkpOworZXJyX2ZyZWVfa2ZpZm86CisJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCisJCWtmaWZvX2ZyZWUoJmRjLT5wb3J0W2ldLmZpZm9fdWwpOwogZXJyX2ZyZWVfc2J1ZjoKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCWlvdW5tYXAoZGMtPmJhc2VfYWRkcik7CkBAIC0xNTM2LDggKzE1NTksNyBAQAogCWZyZWVfaXJxKHBkZXYtPmlycSwgZGMpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCi0JCWlmIChkYy0+cG9ydFtpXS5maWZvX3VsKQotCQkJa2ZpZm9fZnJlZShkYy0+cG9ydFtpXS5maWZvX3VsKTsKKwkJa2ZpZm9fZnJlZSgmZGMtPnBvcnRbaV0uZmlmb191bCk7CiAKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCkBAIC0xNjczLDcgKzE2OTUsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcnZhbCA9IF9fa2ZpZm9fcHV0KHBvcnQtPmZpZm9fdWwsICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCBjb3VudCk7CisJcnZhbCA9IGtmaWZvX2luKCZwb3J0LT5maWZvX3VsLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgY291bnQpOwogCiAJLyogbm90aWZ5IGNhcmQgKi8KIAlpZiAodW5saWtlbHkoZGMgPT0gTlVMTCkpIHsKQEAgLTE3MjEsNyArMTc0Myw3IEBACiAJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQogCQlnb3RvIGV4aXQ7CiAKLQlyb29tID0gcG9ydC0+Zmlmb191bC0+c2l6ZSAtIF9fa2ZpZm9fbGVuKHBvcnQtPmZpZm9fdWwpOworCXJvb20gPSBwb3J0LT5maWZvX3VsLnNpemUgLSBrZmlmb19sZW4oJnBvcnQtPmZpZm9fdWwpOwogCiBleGl0OgogCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CkBAIC0xODc4LDcgKzE5MDAsNyBAQAogCQlnb3RvIGV4aXRfaW5fYnVmZmVyOwogCX0KIAotCXJ2YWwgPSBfX2tmaWZvX2xlbihwb3J0LT5maWZvX3VsKTsKKwlydmFsID0ga2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKIAogZXhpdF9pbl9idWZmZXI6CiAJcmV0dXJuIHJ2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggOGMyNjJhYWY3Li4wNzk4NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAlpbnQgY2FtZXJhX3Bvd2VyOwogCWludCBibHVldG9vdGhfcG93ZXI7CiAJc3RydWN0IG11dGV4IGxvY2s7Ci0Jc3RydWN0IGtmaWZvICpmaWZvOworCXN0cnVjdCBrZmlmbyBmaWZvOwogCXNwaW5sb2NrX3QgZmlmb19sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IGZpZm9fcHJvY19saXN0OwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmaWZvX2FzeW5jOwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfam9nX2RldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9rZXlfZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnB1dF93b3JrOwotCXN0cnVjdCBrZmlmbyAqaW5wdXRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gaW5wdXRfZmlmbzsKIAlzcGlubG9ja190IGlucHV0X2ZpZm9fbG9jazsKIH0gc29ueXBpX2RldmljZTsKIApAQCAtNzc3LDggKzc3Nyw5IEBACiB7CiAJc3RydWN0IHNvbnlwaV9rZXlwcmVzcyBrcDsKIAotCXdoaWxlIChrZmlmb19nZXQoc29ueXBpX2RldmljZS5pbnB1dF9maWZvLCAodW5zaWduZWQgY2hhciAqKSZrcCwKLQkJCSBzaXplb2Yoa3ApKSA9PSBzaXplb2Yoa3ApKSB7CisJd2hpbGUgKGtmaWZvX291dF9sb2NrZWQoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCisJCQkgc2l6ZW9mKGtwKSwgJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmb19sb2NrKQorCQkJPT0gc2l6ZW9mKGtwKSkgewogCQltc2xlZXAoMTApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAwKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwpAQCAtODI3LDggKzgyOCw5IEBACiAJaWYgKGtwLmRldikgewogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAxKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwotCQlrZmlmb19wdXQoc29ueXBpX2RldmljZS5pbnB1dF9maWZvLAotCQkJICAodW5zaWduZWQgY2hhciAqKSZrcCwgc2l6ZW9mKGtwKSk7CisJCWtmaWZvX2luX2xvY2tlZCgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvLAorCQkJKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCksCisJCQkmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwogCQlzY2hlZHVsZV93b3JrKCZzb255cGlfZGV2aWNlLmlucHV0X3dvcmspOwogCX0KIH0KQEAgLTg4MCw3ICs4ODIsOCBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHNvbnlwaV9hY3BpX2RldmljZSwgMSwgZXZlbnQpOwogI2VuZGlmCiAKLQlrZmlmb19wdXQoc29ueXBpX2RldmljZS5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJa2ZpZm9faW5fbG9ja2VkKCZzb255cGlfZGV2aWNlLmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LAorCQkJc2l6ZW9mKGV2ZW50KSwgJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKIAlraWxsX2Zhc3luYygmc29ueXBpX2RldmljZS5maWZvX2FzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0KTsKIApAQCAtOTA2LDcgKzkwOSw3IEBACiAJbXV0ZXhfbG9jaygmc29ueXBpX2RldmljZS5sb2NrKTsKIAkvKiBGbHVzaCBpbnB1dCBxdWV1ZSBvbiBmaXJzdCBvcGVuICovCiAJaWYgKCFzb255cGlfZGV2aWNlLm9wZW5fY291bnQpCi0JCWtmaWZvX3Jlc2V0KHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJCWtmaWZvX3Jlc2V0KCZzb255cGlfZGV2aWNlLmZpZm8pOwogCXNvbnlwaV9kZXZpY2Uub3Blbl9jb3VudCsrOwogCW11dGV4X3VubG9jaygmc29ueXBpX2RldmljZS5sb2NrKTsKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC05MTksMTcgKzkyMiwxOCBAQAogCXNzaXplX3QgcmV0OwogCXVuc2lnbmVkIGNoYXIgYzsKIAotCWlmICgoa2ZpZm9fbGVuKHNvbnlwaV9kZXZpY2UuZmlmbykgPT0gMCkgJiYKKwlpZiAoKGtmaWZvX2xlbigmc29ueXBpX2RldmljZS5maWZvKSA9PSAwKSAmJgogCSAgICAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0LAotCQkJCSAgICAgICBrZmlmb19sZW4oc29ueXBpX2RldmljZS5maWZvKSAhPSAwKTsKKwkJCQkgICAgICAga2ZpZm9fbGVuKCZzb255cGlfZGV2aWNlLmZpZm8pICE9IDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAl3aGlsZSAocmV0IDwgY291bnQgJiYKLQkgICAgICAgKGtmaWZvX2dldChzb255cGlfZGV2aWNlLmZpZm8sICZjLCBzaXplb2YoYykpID09IHNpemVvZihjKSkpIHsKKwkgICAgICAgKGtmaWZvX291dF9sb2NrZWQoJnNvbnlwaV9kZXZpY2UuZmlmbywgJmMsIHNpemVvZihjKSwKKwkJCQkgJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKSA9PSBzaXplb2YoYykpKSB7CiAJCWlmIChwdXRfdXNlcihjLCBidWYrKykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0Kys7CkBAIC05NDYsNyArOTUwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29ueXBpX21pc2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJnNvbnlwaV9kZXZpY2UuZmlmb19wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4oc29ueXBpX2RldmljZS5maWZvKSkKKwlpZiAoa2ZpZm9fbGVuKCZzb255cGlfZGV2aWNlLmZpZm8pKQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMTMsMTEgKzEzMTcsMTAgQEAKIAkJCSJodHRwOi8vd3d3LmxpbnV4Lml0L35tYWxhdHRpYS93aWtpL2luZGV4LnBocC9Tb255X2RyaXZlcnNcbiIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKLQlzb255cGlfZGV2aWNlLmZpZm8gPSBrZmlmb19hbGxvYyhTT05ZUElfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJCSAmc29ueXBpX2RldmljZS5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueXBpX2RldmljZS5maWZvKSkgeworCWVycm9yID0ga2ZpZm9fYWxsb2MoJnNvbnlwaV9kZXZpY2UuZmlmbywgU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzb255cGk6IGtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0KTsKQEAgLTEzOTMsMTIgKzEzOTYsMTAgQEAKIAkJfQogCiAJCXNwaW5fbG9ja19pbml0KCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jayk7Ci0JCXNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyA9Ci0JCQlrZmlmb19hbGxvYyhTT05ZUElfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJICAgICZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jayk7Ci0JCWlmIChJU19FUlIoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKSkgeworCQllcnJvciA9IGtmaWZvX2FsbG9jKCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8sIFNPTllQSV9CVUZfU0laRSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGVycm9yKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNvbnlwaToga2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJCWVycm9yID0gUFRSX0VSUihzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8pOwogCQkJZ290byBlcnJfaW5wZGV2X3VucmVnaXN0ZXI7CiAJCX0KIApAQCAtMTQyMyw3ICsxNDI0LDcgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CiAgZXJyX3B1dF9wY2lkZXY6CiAJcGNpX2Rldl9wdXQocGNpZGV2KTsKLQlrZmlmb19mcmVlKHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2RldmljZS5maWZvKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE0MzgsNyArMTQzOSw3IEBACiAJaWYgKHVzZWlucHV0KSB7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNvbnlwaV9kZXZpY2UuaW5wdXRfa2V5X2Rldik7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNvbnlwaV9kZXZpY2UuaW5wdXRfam9nX2Rldik7Ci0JCWtmaWZvX2ZyZWUoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKKwkJa2ZpZm9fZnJlZSgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKIAl9CiAKIAltaXNjX2RlcmVnaXN0ZXIoJnNvbnlwaV9taXNjX2RldmljZSk7CkBAIC0xNDUxLDcgKzE0NTIsNyBAQAogCQlwY2lfZGV2X3B1dChzb255cGlfZGV2aWNlLmRldik7CiAJfQogCi0Ja2ZpZm9fZnJlZShzb255cGlfZGV2aWNlLmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuZmlmbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IGRmNWI2ODQuLmM1ZmFjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMTcwMCwxMSArMTcwMCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoaW50IGN0cmwsIHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpbnQgZGltbSwgc2l6ZTAsIHNpemUxOworCWludCBkaW1tLCBzaXplMCwgc2l6ZTEsIGZhY3RvciA9IDA7CiAJdTMyIGRiYW07CiAJdTMyICpkY3NiOwogCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgeworCQlpZiAocHZ0LT5kY2xyMCAmIEYxMF9XSURUSF8xMjgpCisJCQlmYWN0b3IgPSAxOworCiAJCS8qIEs4IGZhbWlsaWVzIDwgcmV2RiBub3Qgc3VwcG9ydGVkIHlldCAqLwogCSAgICAgICBpZiAocHZ0LT5leHRfbW9kZWwgPCBLOF9SRVZfRikKIAkJCXJldHVybjsKQEAgLTE3MzIsNyArMTczNSw4IEBACiAJCQlzaXplMSA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgREJBTV9ESU1NKGRpbW0sIGRiYW0pKTsKIAogCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiICVkOiAlNWRNQiAlZDogJTVkTUJcbiIsCi0JCQkgICAgZGltbSAqIDIsIHNpemUwLCBkaW1tICogMiArIDEsIHNpemUxKTsKKwkJCSAgICBkaW1tICogMiwgICAgIHNpemUwIDw8IGZhY3RvciwKKwkJCSAgICBkaW1tICogMiArIDEsIHNpemUxIDw8IGZhY3Rvcik7CiAJfQogfQogCkBAIC0yMzQ1LDcgKzIzNDksNyBAQAogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENMUl8wLCAmcHZ0LT5kY2xyMCk7CiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzAsICZwdnQtPmRjaHIwKTsKIAotCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKSB7CisJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkgJiYgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCkgewogCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMSwgJnB2dC0+ZGNscjEpOwogCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDSFJfMSwgJnB2dC0+ZGNocjEpOwogCX0KQEAgLTI2ODYsOSArMjY5MCw4IEBACiAJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiJXMiLCBlY2Nfd2FybmluZyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCX0gZWxzZQotCQkvKiBDTEVBUiB0aGUgb3ZlcnJpZGUsIHNpbmNlIEJJT1MgY29udHJvbGxlZCBpdCAqLwogCQllY2NfZW5hYmxlX292ZXJyaWRlID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MjUsMTYgKzI5MjgsMTUgQEAKIAogCWFtZDY0X2ZyZWVfbWNfc2libGluZ19kZXZpY2VzKHB2dCk7CiAKLQlrZnJlZShwdnQpOwotCW1jaS0+cHZ0X2luZm8gPSBOVUxMOwotCi0JbWNpX2xvb2t1cFtwdnQtPm1jX25vZGVfaWRdID0gTlVMTDsKLQogCS8qIHVucmVnaXN0ZXIgZnJvbSBFREFDIE1DRSAqLwogCWFtZF9yZXBvcnRfZ2FydF9lcnJvcnMoZmFsc2UpOwogCWFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKGFtZDY0X2RlY29kZV9idXNfZXJyb3IpOwogCiAJLyogRnJlZSB0aGUgRURBQyBDT1JFIHJlc291cmNlcyAqLworCW1jaS0+cHZ0X2luZm8gPSBOVUxMOworCW1jaV9sb29rdXBbcHZ0LT5tY19ub2RlX2lkXSA9IE5VTEw7CisKKwlrZnJlZShwdnQpOwogCWVkYWNfbWNfZnJlZShtY2kpOwogfQogCkBAIC0zMDExLDI1ICszMDEzLDI5IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbWQ2NF9lZGFjX2luaXQodm9pZCkKIHsKIAlpbnQgbmIsIGVyciA9IC1FTk9ERVY7CisJYm9vbCBsb2FkX29rID0gZmFsc2U7CiAKIAllZGFjX3ByaW50ayhLRVJOX0lORk8sIEVEQUNfTU9EX1NUUiwgRURBQ19BTUQ2NF9WRVJTSU9OICJcbiIpOwogCiAJb3BzdGF0ZV9pbml0KCk7CiAKIAlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9yZXQ7CiAKIAltc3JzID0gbXNyc19hbGxvYygpOworCWlmICghbXNycykKKwkJZ290byBlcnJfcmV0OwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfcGNpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB0aGUgYXJyYXkgJ3B2dF9sb29rdXBbXScgY29udGFpbnMgcG9pbnRlcnMgdG8gYWxsb2MnZAogCSAqIGFtZDY0X3B2dCBzdHJ1Y3RzLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW4gdGhlIDJuZCBzdGFnZSBpbml0IGZ1bmN0aW9uCiAJICogdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNQyBpbnN0YW5jZXMuCiAJICovCisJZXJyID0gLUVOT0RFVjsKIAlmb3IgKG5iID0gMDsgbmIgPCBudW1fazhfbm9ydGhicmlkZ2VzOyBuYisrKSB7CiAJCWlmICghcHZ0X2xvb2t1cFtuYl0pCiAJCQljb250aW51ZTsKQEAgLTMwMzcsMTYgKzMwNDMsMjEgQEAKIAkJZXJyID0gYW1kNjRfaW5pdF8ybmRfc3RhZ2UocHZ0X2xvb2t1cFtuYl0pOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfMm5kX3N0YWdlOworCisJCWxvYWRfb2sgPSB0cnVlOwogCX0KIAotCWFtZDY0X3NldHVwX3BjaV9kZXZpY2UoKTsKLQotCXJldHVybiAwOworCWlmIChsb2FkX29rKSB7CisJCWFtZDY0X3NldHVwX3BjaV9kZXZpY2UoKTsKKwkJcmV0dXJuIDA7CisJfQogCiBlcnJfMm5kX3N0YWdlOgotCWRlYnVnZjAoIjJuZCBzdGFnZSBmYWlsZWRcbiIpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7Ci0KK2Vycl9wY2k6CisJbXNyc19mcmVlKG1zcnMpOworCW1zcnMgPSBOVUxMOworZXJyX3JldDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCmluZGV4IDQyMjcyOGMuLmZiNjBhODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCkBAIC01MzQsOCArNTM0LDYgQEAKIHsKIAl1OCBoZWFkZXJfdHlwZTsKIAotCWRlYnVnZjAoIiVzKClcbiIsIF9fZnVuY19fKTsKLQogCWdldF9wY2lfcGFyaXR5X3N0YXR1cyhkZXYsIDApOwogCiAJLyogcmVhZCB0aGUgZGV2aWNlIFRZUEUsIGxvb2tpbmcgZm9yIGJyaWRnZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGZmMmYxMDQuLjc2NmM0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtNDM0LDExICs0MzQsMTEgQEAKICAqIExvb2tzIHVwIHRoZSBpb2N0bCBmdW5jdGlvbiBpbiB0aGUgOjppb2N0bHMgdGFibGUsIGNoZWNraW5nIGZvciByb290CiAgKiBwcmV2aWxlZ2VzIGlmIHNvIHJlcXVpcmVkLCBhbmQgZGlzcGF0Y2hlcyB0byB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbi4KICAqLwotaW50IGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2xvbmcgZHJtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgKmlvY3RsOwogCWRybV9pb2N0bF90ICpmdW5jOwogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwpAQCAtNDQ2LDYgKzQ0Niw3IEBACiAJY2hhciBzdGFja19rZGF0YVsxMjhdOwogCWNoYXIgKmtkYXRhID0gTlVMTDsKIAorCWRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKIAlhdG9taWNfaW5jKCZkZXYtPmlvY3RsX2NvdW50KTsKIAlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfSU9DVExTXSk7CiAJKytmaWxlX3ByaXYtPmlvY3RsX2NvdW50OwpAQCAtNTAxLDcgKzUwMiwxMyBAQAogCQkJCWdvdG8gZXJyX2kxOwogCQkJfQogCQl9Ci0JCXJldGNvZGUgPSBmdW5jKGRldiwga2RhdGEsIGZpbGVfcHJpdik7CisJCWlmIChpb2N0bC0+ZmxhZ3MgJiBEUk1fVU5MT0NLRUQpCisJCQlyZXRjb2RlID0gZnVuYyhkZXYsIGtkYXRhLCBmaWxlX3ByaXYpOworCQllbHNlIHsKKwkJCWxvY2tfa2VybmVsKCk7CisJCQlyZXRjb2RlID0gZnVuYyhkZXYsIGtkYXRhLCBmaWxlX3ByaXYpOworCQkJdW5sb2NrX2tlcm5lbCgpOworCQl9CiAKIAkJaWYgKGNtZCAmIElPQ19PVVQpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBrZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYzM5YjI2Zi4uNWM5Zjc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogCWNvbnN0IGludCByYXRlc1tdID0geyA2MCwgODUsIDc1LCA2MCwgNTAgfTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaW50IHdpZHRoLCBoZWlnaHQ7CisJCWludCB1bmluaXRpYWxpemVkX3Zhcih3aWR0aCksIGhlaWdodDsKIAkJY3Z0ID0gJih0aW1pbmctPmRhdGEub3RoZXJfZGF0YS5kYXRhLmN2dFtpXSk7CiAKIAkJaGVpZ2h0ID0gKGN2dC0+Y29kZVswXSArICgoY3Z0LT5jb2RlWzFdICYgMHhmMCkgPDwgOCkgKyAxKSAqIDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggMjgyZDlmZC4uZDYxZDE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkgICZ2ZXJzaW9uLT5kZXNjKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwKIAkJCURSTV9JT0NUTF9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyl2ZXJzaW9uKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTQ1LDggKzE0NSw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9VTklRVUUsICh1bnNpZ25lZCBsb25nKXUpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfR0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc0LDggKzE3Myw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tYXAzMiB7CkBAIC0yMDUsOCArMjAzLDcgQEAKIAlpZiAoX19wdXRfdXNlcihpZHgsICZtYXAtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjQ2LDggKzI0Myw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobTMyLmZsYWdzLCAmbWFwLT5mbGFncykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUREX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjg0LDggKzI4MCw3IEBACiAJaWYgKF9fcHV0X3VzZXIoKHZvaWQgKikodW5zaWduZWQgbG9uZyloYW5kbGUsICZtYXAtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUk1fTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpZW50MzIgewpAQCAtMzE0LDggKzMwOSw3IEBACiAJaWYgKF9fcHV0X3VzZXIoaWR4LCAmY2xpZW50LT5pZHgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9DTElFTlQsICh1bnNpZ25lZCBsb25nKWNsaWVudCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfQ0xJRU5ULCAodW5zaWduZWQgbG9uZyljbGllbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM1MSw4ICszNDUsNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc3RhdHMsIHNpemVvZigqc3RhdHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfU1RBVFMsICh1bnNpZ25lZCBsb25nKXN0YXRzKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM5NSw4ICszODgsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGFncF9zdGFydCwgJmJ1Zi0+YWdwX3N0YXJ0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BRERfQlVGUywgKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQyNyw4ICs0MTksNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGIzMi5oaWdoX21hcmssICZidWYtPmhpZ2hfbWFyaykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NQVJLX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUFSS19CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8zMiB7CkBAIC00NjksOCArNDYwLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihsaXN0LCAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfSU5GT19CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0lORk9fQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTMxLDggKzUyMSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobGlzdCwgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NzgsOCArNTY3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfRlJFRV9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9GUkVFX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwMzIgewpAQCAtNjA1LDggKzU5Myw3IEBACiAJCQkgICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRzYXJlYWN0eChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTYyOCw4ICs2MTUsNyBAQAogCWlmIChfX3B1dF91c2VyKGN0eF9pZCwgJnJlcXVlc3QtPmN0eF9pZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02NjQsOCArNjUwLDcgQEAKIAkJCSAgJnJlcy0+Y29udGV4dHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKXJlcyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SRVNfQ1RYLCAodW5zaWduZWQgbG9uZylyZXMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcxOCw4ICs3MDMsNyBAQAogCQkJICAmZC0+cmVxdWVzdF9zaXplcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZylkKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0RNQSwgKHVuc2lnbmVkIGxvbmcpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNzUxLDggKzczNSw3IEBACiAJaWYgKHB1dF91c2VyKG0zMi5tb2RlLCAmbW9kZS0+bW9kZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9pbmZvMzIgewpAQCAtNzgxLDggKzc2NCw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbmZvLCBzaXplb2YoKmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtODI3LDE2ICs4MDksMTQgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi50eXBlLCAmcmVxdWVzdC0+dHlwZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUdQX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChfX2dldF91c2VyKHJlcTMyLmhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkKIAkgICAgfHwgX19nZXRfdXNlcihyZXEzMi5waHlzaWNhbCwgJnJlcXVlc3QtPnBoeXNpY2FsKQogCSAgICB8fCBjb3B5X3RvX3VzZXIoYXJncCwgJnJlcTMyLCBzaXplb2YocmVxMzIpKSkgewotCQlkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSAgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwkJZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtODU2LDggKzgzNiw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZzMyIHsKQEAgLTg4MSw4ICs4NjAsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLm9mZnNldCwgJnJlcXVlc3QtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfQklORCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUdQX0JJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX3VuYmluZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTg5OCw4ICs4NzYsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KICNlbmRpZgkJCQkvKiBfX09TX0hBU19BR1AgKi8KIApAQCAtOTIzLDggKzkwMCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoeCwgJnJlcXVlc3QtPnNpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC05NTAsOCArOTI2LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcih4IDw8IFBBR0VfU0hJRlQsICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCkBAIC05ODEsOCArOTU2LDcgQEAKIAkgICAgX19wdXRfdXNlcih1cGRhdGUzMi5kYXRhLCAmcmVxdWVzdC0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCXJldHVybiBlcnI7CiB9CiAjZW5kaWYKQEAgLTEwMjMsOCArOTk3LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5yZXF1ZXN0LnNpZ25hbCwgJnJlcXVlc3QtPnJlcXVlc3Quc2lnbmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA5NCwxNiArMTA2NywxNCBAQAogCSAqIHRoYW4gYWx3YXlzIGZhaWxpbmcuCiAJICovCiAJaWYgKG5yID49IEFSUkFZX1NJWkUoZHJtX2NvbXBhdF9pb2N0bHMpKQotCQlyZXR1cm4gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJZm4gPSBkcm1fY29tcGF0X2lvY3Rsc1tucl07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCBkN2Q3ZWFjLi5jZGVjMzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKIAkJCWlmICghYmVzdF9tYXRjaCkKIAkJCQlyZXR1cm4gZW50cnk7Ci0JCQlpZiAoc2l6ZSA8IGJlc3Rfc2l6ZSkgeworCQkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7CiAJCQkJYmVzdCA9IGVudHJ5OwogCQkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwogCQkJfQpAQCAtNDA4LDcgKzQwOCw3IEBACiAJCWlmIChlbnRyeS0+c2l6ZSA+PSBzaXplICsgd2FzdGVkKSB7CiAJCQlpZiAoIWJlc3RfbWF0Y2gpCiAJCQkJcmV0dXJuIGVudHJ5OwotCQkJaWYgKHNpemUgPCBiZXN0X3NpemUpIHsKKwkJCWlmIChlbnRyeS0+c2l6ZSA8IGJlc3Rfc2l6ZSkgewogCQkJCWJlc3QgPSBlbnRyeTsKIAkJCQliZXN0X3NpemUgPSBlbnRyeS0+c2l6ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKaW5kZXggOTQyMmE3NC4uODE2ODFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKQEAgLTQwOCw2ICs0MDgsMTEgQEAKIAogCWNoNzAwNl9pbmZvKGNsaWVudCwgIkRldGVjdGVkIHZlcnNpb24gSUQ6ICV4XG4iLCB2YWwpOwogCisJLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIGJ1dCBvdGhlcndpc2UgSSBnZXQgbm8KKwkgKiBzaWduYWwuCisJICovCisJY2g3MDA2X3dyaXRlKGNsaWVudCwgMHgzZCwgMHgwKTsKKwogCXJldHVybiAwOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jCmluZGV4IDg3ZjU0NDUuLmU0NDdkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X21vZGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL2NoNzAwNl9tb2RlLmMKQEAgLTQyNywxMSArNDI3LDYgQEAKIAljaDcwMDZfbG9hZF9yZWcoY2xpZW50LCBzdGF0ZSwgQ0g3MDA2X1NVQkNfSU5DNyk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9QTExfQ09OVFJPTCk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9DQUxDX1NVQkNfSU5DMCk7Ci0KLQkvKiBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGZvciwgYnV0IG90aGVyd2lzZSBJIGdldCBubwotCSAqIHNpZ25hbC4KLQkgKi8KLQljaDcwMDZfd3JpdGUoY2xpZW50LCAweDNkLCAweDApOwogfQogCiB2b2lkIGNoNzAwNl9zdGF0ZV9zYXZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kbWEuYwppbmRleCA3ZDFkODhjLi5kZTMyZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZG1hLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MTBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5jCmluZGV4IGZhYmI5YTguLmMxZTAyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuYwpAQCAtNTksNyArNTksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYwppbmRleCA4NzdiZjZjLi4wNmJkNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZG1hLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgzMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MzBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5jCmluZGV4IDM4OTU5N2UuLjQ0Zjk5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyZmEyMTc4Li4yNDI4NmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTMyOSw3ICszMjksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX2dlbV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jCmluZGV4IDFmZTY4YTIuLjEzYjAyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lvYzMyLmMKQEAgLTY2LDggKzY2LDcgQEAKIAkJCSAgJmJhdGNoYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9CQVRDSEJVRkZFUiwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLAogCQkJICh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyKTsKIH0KIApAQCAtMTAyLDggKzEwMSw4IEBACiAJCQkgICZjbWRidWZmZXItPmNsaXByZWN0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwKKwkJCSAodW5zaWduZWQgbG9uZyljbWRidWZmZXIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdDMyIHsKQEAgLTEyNSw4ICsxMjQsOCBAQAogCQkJICAmcmVxdWVzdC0+aXJxX3NlcSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0zMiB7CiAJaW50IHBhcmFtOwpAQCAtMTQ5LDggKzE0OCw4IEBACiAJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fYWxsb2MzMiB7CkBAIC0xNzgsOCArMTc3LDggQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9BTExPQywKKwkJCSAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogZHJtX2lvY3RsX2NvbXBhdF90ICppOTE1X2NvbXBhdF9pb2N0bHNbXSA9IHsKQEAgLTIxMSwxMiArMjEwLDEwIEBACiAJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKGk5MTVfY29tcGF0X2lvY3RscykpCiAJCWZuID0gaTkxNV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggOTdlZTU2Ni4uZGRmZTE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vcGVuID0gZHJtX29wZW4sCiAJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pb2MzMi5jCmluZGV4IDMwZDAwNDcuLmMxZjg3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYwpAQCAtMTAwLDggKzEwMCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX01HQV9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfZ2V0cGFyYW0zMiB7CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCSAgJmdldHBhcmFtLT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9kcm1fYm9vdHN0cmFwMzIgewpAQCAtMTY2LDggKzE2NCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9zaXplLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01HQV9ETUFfQk9PVFNUUkFQLAorCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAsCiAJCQkodW5zaWduZWQgbG9uZylkbWFfYm9vdHN0cmFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjIwLDEyICsyMTcsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG1nYV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKaW5kZXggMWQ5MGQ0ZC4uNDhjMjkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKQEAgLTgsMTQgKzgsMTUgQEAKICAgICAgICAgICAgICBub3V2ZWF1X3NnZG1hLm8gbm91dmVhdV9kbWEubyBcCiAgICAgICAgICAgICAgbm91dmVhdV9iby5vIG5vdXZlYXVfZmVuY2UubyBub3V2ZWF1X2dlbS5vIG5vdXZlYXVfdHRtLm8gXAogICAgICAgICAgICAgIG5vdXZlYXVfaHcubyBub3V2ZWF1X2NhbGMubyBub3V2ZWF1X2Jpb3MubyBub3V2ZWF1X2kyYy5vIFwKLQkgICAgIG5vdXZlYXVfZGlzcGxheS5vIG5vdXZlYXVfY29ubmVjdG9yLm8gbm91dmVhdV9mYmNvbi5vIFwKLQkgICAgIG5vdXZlYXVfZHAubyBcCisgICAgICAgICAgICAgbm91dmVhdV9kaXNwbGF5Lm8gbm91dmVhdV9jb25uZWN0b3IubyBub3V2ZWF1X2ZiY29uLm8gXAorICAgICAgICAgICAgIG5vdXZlYXVfZHAubyBub3V2ZWF1X2dyY3R4Lm8gXAogICAgICAgICAgICAgIG52MDRfdGltZXIubyBcCiAgICAgICAgICAgICAgbnYwNF9tYy5vIG52NDBfbWMubyBudjUwX21jLm8gXAogICAgICAgICAgICAgIG52MDRfZmIubyBudjEwX2ZiLm8gbnY0MF9mYi5vIFwKICAgICAgICAgICAgICBudjA0X2ZpZm8ubyBudjEwX2ZpZm8ubyBudjQwX2ZpZm8ubyBudjUwX2ZpZm8ubyBcCiAgICAgICAgICAgICAgbnYwNF9ncmFwaC5vIG52MTBfZ3JhcGgubyBudjIwX2dyYXBoLm8gXAogICAgICAgICAgICAgIG52NDBfZ3JhcGgubyBudjUwX2dyYXBoLm8gXAorICAgICAgICAgICAgIG52NDBfZ3JjdHgubyBcCiAgICAgICAgICAgICAgbnYwNF9pbnN0bWVtLm8gbnY1MF9pbnN0bWVtLm8gXAogICAgICAgICAgICAgIG52NTBfY3J0Yy5vIG52NTBfZGFjLm8gbnY1MF9zb3IubyBcCiAgICAgICAgICAgICAgbnY1MF9jdXJzb3IubyBudjUwX2Rpc3BsYXkubyBudjUwX2ZiY29uLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwppbmRleCA1ZWVjNWVkLi5iYTE0Mzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwpAQCAtMTgxLDQzICsxODEsNDIgQEAKIAljb25zdCBjaGFyIGRlc2NbOF07CiAJdm9pZCAoKmxvYWRiaW9zKShzdHJ1Y3QgZHJtX2RldmljZSAqLCB1aW50OF90ICopOwogCWNvbnN0IGJvb2wgcnc7Ci0JaW50IHNjb3JlOwogfTsKIAogc3RhdGljIHN0cnVjdCBtZXRob2RzIG52MDRfbWV0aG9kc1tdID0gewogCXsgIlBST00iLCBsb2FkX3ZiaW9zX3Byb20sIGZhbHNlIH0sCiAJeyAiUFJBTUlOIiwgbG9hZF92Ymlvc19wcmFtaW4sIHRydWUgfSwKIAl7ICJQQ0lST00iLCBsb2FkX3ZiaW9zX3BjaSwgdHJ1ZSB9LAotCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBtZXRob2RzIG52NTBfbWV0aG9kc1tdID0gewogCXsgIlBSQU1JTiIsIGxvYWRfdmJpb3NfcHJhbWluLCB0cnVlIH0sCiAJeyAiUFJPTSIsIGxvYWRfdmJpb3NfcHJvbSwgZmFsc2UgfSwKIAl7ICJQQ0lST00iLCBsb2FkX3ZiaW9zX3BjaSwgdHJ1ZSB9LAotCXsgfQogfTsKIAorI2RlZmluZSBNRVRIT0RDTlQgMworCiBzdGF0aWMgYm9vbCBOVlNoYWRvd1ZCSU9TKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ4X3QgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbWV0aG9kcyAqbWV0aG9kcywgKm1ldGhvZDsKKwlzdHJ1Y3QgbWV0aG9kcyAqbWV0aG9kczsKKwlpbnQgaTsKIAlpbnQgdGVzdHNjb3JlID0gMzsKKwlpbnQgc2NvcmVzW01FVEhPRENOVF07CiAKIAlpZiAobm91dmVhdV92YmlvcykgewotCQltZXRob2QgPSBudjA0X21ldGhvZHM7Ci0JCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7Ci0JCQlpZiAoIXN0cmNhc2VjbXAobm91dmVhdV92YmlvcywgbWV0aG9kLT5kZXNjKSkKKwkJbWV0aG9kcyA9IG52MDRfbWV0aG9kczsKKwkJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKQorCQkJaWYgKCFzdHJjYXNlY21wKG5vdXZlYXVfdmJpb3MsIG1ldGhvZHNbaV0uZGVzYykpCiAJCQkJYnJlYWs7Ci0JCQltZXRob2QrKzsKLQkJfQogCi0JCWlmIChtZXRob2QtPmxvYWRiaW9zKSB7CisJCWlmIChpIDwgTUVUSE9EQ05UKSB7CiAJCQlOVl9JTkZPKGRldiwgIkF0dGVtcHRpbmcgdG8gdXNlIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKLQkJCQltZXRob2QtPmRlc2MpOworCQkJCW1ldGhvZHNbaV0uZGVzYyk7CiAKLQkJCW1ldGhvZC0+bG9hZGJpb3MoZGV2LCBkYXRhKTsKLQkJCWlmIChzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZC0+cncpKQorCQkJbWV0aG9kc1tpXS5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQkJaWYgKHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kc1tpXS5ydykpCiAJCQkJcmV0dXJuIHRydWU7CiAJCX0KIApAQCAtMjI5LDI4ICsyMjgsMjQgQEAKIAllbHNlCiAJCW1ldGhvZHMgPSBudjUwX21ldGhvZHM7CiAKLQltZXRob2QgPSBtZXRob2RzOwotCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7CisJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKSB7CiAJCU5WX1RSQUNFKGRldiwgIkF0dGVtcHRpbmcgdG8gbG9hZCBCSU9TIGltYWdlIGZyb20gJXNcbiIsCi0JCQkgbWV0aG9kLT5kZXNjKTsKKwkJCSBtZXRob2RzW2ldLmRlc2MpOwogCQlkYXRhWzBdID0gZGF0YVsxXSA9IDA7CS8qIGF2b2lkIHJldXNlIG9mIHByZXZpb3VzIGltYWdlICovCi0JCW1ldGhvZC0+bG9hZGJpb3MoZGV2LCBkYXRhKTsKLQkJbWV0aG9kLT5zY29yZSA9IHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kLT5ydyk7Ci0JCWlmIChtZXRob2QtPnNjb3JlID09IHRlc3RzY29yZSkKKwkJbWV0aG9kc1tpXS5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQlzY29yZXNbaV0gPSBzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZHNbaV0ucncpOworCQlpZiAoc2NvcmVzW2ldID09IHRlc3RzY29yZSkKIAkJCXJldHVybiB0cnVlOwotCQltZXRob2QrKzsKIAl9CiAKIAl3aGlsZSAoLS10ZXN0c2NvcmUgPiAwKSB7Ci0JCW1ldGhvZCA9IG1ldGhvZHM7Ci0JCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7Ci0JCQlpZiAobWV0aG9kLT5zY29yZSA9PSB0ZXN0c2NvcmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKSB7CisJCQlpZiAoc2NvcmVzW2ldID09IHRlc3RzY29yZSkgewogCQkJCU5WX1RSQUNFKGRldiwgIlVzaW5nIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKLQkJCQkJIG1ldGhvZC0+ZGVzYyk7Ci0JCQkJbWV0aG9kLT5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQkJCQkgbWV0aG9kc1tpXS5kZXNjKTsKKwkJCQltZXRob2RzW2ldLmxvYWRiaW9zKGRldiwgZGF0YSk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCQltZXRob2QrKzsKIAkJfQogCX0KIApAQCAtMjYxLDEwICsyNTYsNyBAQAogc3RydWN0IGluaXRfdGJsX2VudHJ5IHsKIAljaGFyICpuYW1lOwogCXVpbnQ4X3QgaWQ7Ci0JaW50IGxlbmd0aDsKLQlpbnQgbGVuZ3RoX29mZnNldDsKLQlpbnQgbGVuZ3RoX211bHRpcGxpZXI7Ci0JYm9vbCAoKmhhbmRsZXIpKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QsIHN0cnVjdCBpbml0X2V4ZWMgKik7CisJaW50ICgqaGFuZGxlcikoc3RydWN0IG52YmlvcyAqLCB1aW50MTZfdCwgc3RydWN0IGluaXRfZXhlYyAqKTsKIH07CiAKIHN0cnVjdCBiaXRfZW50cnkgewpAQCAtODIwLDcgKzgxMiw3IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19yZXN0cmljdF9wcm9nKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC04NTIsOSArODQ0LDEwIEBACiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA3XSk7CiAJdWludDhfdCBjb25maWc7CiAJdWludDMyX3QgY29uZmlndmFsOworCWludCBsZW4gPSAxMSArIGNvdW50ICogNDsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiU2hpZnQ6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWCwgUmVnOiAweCUwOFhcbiIsCkBAIC04NjUsNyArODU4LDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWNvbmZpZ3ZhbCA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTEgKyBjb25maWcgKiA0XSk7CkBAIC04NzQsMTAgKzg2NywxMCBAQAogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgY29uZmlndmFsKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3JlcGVhdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC05MTIsMTAgKzkwNSwxMCBAQAogCiAJaWV4ZWMtPnJlcGVhdCA9IGZhbHNlOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX3Jlc3RyaWN0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC05NTEsOSArOTQ0LDEwIEBACiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA4XSk7CiAJdWludDhfdCBjb25maWc7CiAJdWludDE2X3QgZnJlcTsKKwlpbnQgbGVuID0gMTIgKyBjb3VudCAqIDI7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIlNoaWZ0OiAweCUwMlgsIElPIEZsYWcgQ29uZGl0aW9uOiAweCUwMlgsICIKQEAgLTk2Niw3ICs5NjAsNyBAQAogCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkgIjB4JTA0WDogQ29uZmlnIDB4JTAyWCBleGNlZWRzIG1heGltYWwgYm91bmQgMHglMDJYXG4iLAogCQkJIG9mZnNldCwgY29uZmlnLCBjb3VudCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZnJlcSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTIgKyBjb25maWcgKiAyXSk7CkBAIC05ODYsMTAgKzk4MCwxMCBAQAogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSAqIDEwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2VuZF9yZXBlYXQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTAwNywxMiArMTAwMSwxMiBAQAogCSAqIHdlJ3JlIG5vdCBpbiByZXBlYXQgbW9kZQogCSAqLwogCWlmIChpZXhlYy0+cmVwZWF0KQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvcHkoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTA0MSw3ICsxMDM1LDcgQEAKIAl1aW50OF90IGNydGNkYXRhOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxMTsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUmVnOiAweCUwOFgsIFNoaWZ0OiAweCUwMlgsIFNyY01hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlhcbiIsCkBAIC0xMDYwLDEwICsxMDU0LDEwIEBACiAJY3J0Y2RhdGEgfD0gKHVpbnQ4X3QpZGF0YTsKIAliaW9zX2lkeHBydF93cihiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4LCBjcnRjZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X25vdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMDc5LDEwICsxMDczLDEwIEBACiAJCUJJT1NMT0coYmlvcywgIjB4JTA0WDogLS0tLS0tIEV4ZWN1dGluZyBmb2xsb3dpbmcgY29tbWFuZHMgLS0tLS0tXG4iLCBvZmZzZXQpOwogCiAJaWV4ZWMtPmV4ZWN1dGUgPSAhaWV4ZWMtPmV4ZWN1dGU7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX2ZsYWdfY29uZGl0aW9uKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTEwMCw3ICsxMDk0LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJaWYgKGlvX2ZsYWdfY29uZGl0aW9uX21ldChiaW9zLCBvZmZzZXQsIGNvbmQpKQogCQlCSU9TTE9HKGJpb3MsICIweCUwNFg6IENvbmRpdGlvbiBmdWxmaWxsZWQgLS0gY29udGludWluZyB0byBleGVjdXRlXG4iLCBvZmZzZXQpOwpAQCAtMTEwOSwxMCArMTEwMywxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pZHhfYWRkcl9sYXRjaGVkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xMTQwLDExICsxMTM0LDEyIEBACiAJdWludDMyX3QgbWFzayA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgOV0pOwogCXVpbnQzMl90IGRhdGEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDEzXSk7CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTddOworCWludCBsZW4gPSAxOCArIGNvdW50ICogMjsKIAl1aW50MzJfdCB2YWx1ZTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDb250cm9sUmVnOiAweCUwOFgsIERhdGFSZWc6IDB4JTA4WCwgIgogCQkgICAgICAiTWFzazogMHglMDhYLCBEYXRhOiAweCUwOFgsIENvdW50OiAweCUwMlhcbiIsCkBAIC0xMTY0LDEwICsxMTU5LDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCBjb250cm9scmVnLCB2YWx1ZSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fcmVzdHJpY3RfcGxsMihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTE5NiwyNSArMTE5MSwyNiBAQAogCXVpbnQ4X3Qgc2hpZnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDZdOwogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgN10pOworCWludCBsZW4gPSAxMSArIGNvdW50ICogNDsKIAl1aW50OF90IGNvbmZpZzsKIAl1aW50MzJfdCBmcmVxOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJTaGlmdDogMHglMDJYLCBDb3VudDogMHglMDJYLCBSZWc6IDB4JTA4WFxuIiwKIAkJb2Zmc2V0LCBjcnRjcG9ydCwgY3J0Y2luZGV4LCBtYXNrLCBzaGlmdCwgY291bnQsIHJlZyk7CiAKIAlpZiAoIXJlZykKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAljb25maWcgPSAoYmlvc19pZHhwcnRfcmQoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCkgJiBtYXNrKSA+PiBzaGlmdDsKIAlpZiAoY29uZmlnID4gY291bnQpIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWZyZXEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDExICsgY29uZmlnICogNF0pOwpAQCAtMTIyNCwxMCArMTIyMCwxMCBAQAogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9wbGwyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEyNDQsMTYgKzEyNDAsMTYgQEAKIAl1aW50MzJfdCBmcmVxID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDk7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDRYLCBGcmVxOiAlZGtIelxuIiwKIAkJb2Zmc2V0LCByZWcsIGZyZXEpOwogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDk7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2kyY19ieXRlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEyNzcsMTIgKzEyNzMsMTMgQEAKIAl1aW50OF90IGkyY19pbmRleCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBpMmNfYWRkcmVzcyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CisJaW50IGxlbiA9IDQgKyBjb3VudCAqIDM7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmNoYW47CiAJc3RydWN0IGkyY19tc2cgbXNnOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IERDQkkyQ0luZGV4OiAweCUwMlgsIEkyQ0FkZHJlc3M6IDB4JTAyWCwgIgogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTEyOTAsNyArMTI4Nyw3IEBACiAKIAljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoYmlvcy0+ZGV2LCBpMmNfaW5kZXgpOwogCWlmICghY2hhbikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQ4X3QgaTJjX3JlZyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNCArIGkgKiAzXTsKQEAgLTEzMDMsNyArMTMwMCw3IEBACiAJCW1zZy5sZW4gPSAxOwogCQltc2cuYnVmID0gJnZhbHVlOwogCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAKIAkJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJMkNSZWc6IDB4JTAyWCwgVmFsdWU6IDB4JTAyWCwgIgogCQkJICAgICAgIk1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLApAQCAtMTMxNywxNCArMTMxNCwxNCBAQAogCQkJbXNnLmxlbiA9IDE7CiAJCQltc2cuYnVmID0gJnZhbHVlOwogCQkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9pMmNfYnl0ZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMzQ2LDEyICsxMzQzLDEzIEBACiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOworCWludCBsZW4gPSA0ICsgY291bnQgKiAyOwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBEQ0JJMkNJbmRleDogMHglMDJYLCBJMkNBZGRyZXNzOiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0xMzU5LDcgKzEzNTcsNyBAQAogCiAJY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGJpb3MtPmRldiwgaTJjX2luZGV4KTsKIAlpZiAoIWNoYW4pCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IGkyY19yZWcgPSBiaW9zLT5kYXRhW29mZnNldCArIDQgKyBpICogMl07CkBAIC0xMzc0LDE0ICsxMzcyLDE0IEBACiAJCQltc2cubGVuID0gMTsKIAkJCW1zZy5idWYgPSAmZGF0YTsKIAkJCWlmIChpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpICE9IDEpCi0JCQkJcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1faTJjKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE0MDEsMTMgKzEzOTksMTQgQEAKIAl1aW50OF90IGkyY19pbmRleCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBpMmNfYWRkcmVzcyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CisJaW50IGxlbiA9IDQgKyBjb3VudDsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqY2hhbjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJdWludDhfdCBkYXRhWzI1Nl07CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRENCSTJDSW5kZXg6IDB4JTAyWCwgSTJDQWRkcmVzczogMHglMDJYLCAiCiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLApAQCAtMTQxNSw3ICsxNDE0LDcgQEAKIAogCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChiaW9zLT5kZXYsIGkyY19pbmRleCk7CiAJaWYgKCFjaGFuKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGF0YVtpXSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNCArIGldOwpAQCAtMTQyOSwxMyArMTQyOCwxMyBAQAogCQltc2cubGVuID0gY291bnQ7CiAJCW1zZy5idWYgPSBkYXRhOwogCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfdG1kcyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNDYwLDcgKzE0NTksNyBAQAogCXVpbnQzMl90IHJlZywgdmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDU7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IE1hZ2ljTG9va3VwVmFsdWU6IDB4JTAyWCwgVE1EU0FkZHI6IDB4JTAyWCwgIgogCQkgICAgICAiTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCkBAIC0xNDY4LDcgKzE0NjcsNyBAQAogCiAJcmVnID0gZ2V0X3RtZHNfaW5kZXhfcmVnKGJpb3MtPmRldiwgbWx2KTsKIAlpZiAoIXJlZykKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsCiAJCSAgdG1kc2FkZHIgfCBOVl9QUkFNREFDX0ZQX1RNRFNfQ09OVFJPTF9XUklURV9ESVNBQkxFKTsKQEAgLTE0NzYsMTAgKzE0NzUsMTAgQEAKIAliaW9zX3dyMzIoYmlvcywgcmVnICsgNCwgdmFsdWUpOwogCWJpb3Nfd3IzMihiaW9zLCByZWcsIHRtZHNhZGRyKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA1OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV90bWRzX2dyb3VwKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xNTAwLDE4ICsxNDk5LDE5IEBACiAKIAl1aW50OF90IG1sdiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CisJaW50IGxlbiA9IDMgKyBjb3VudCAqIDI7CiAJdWludDMyX3QgcmVnOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IE1hZ2ljTG9va3VwVmFsdWU6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBtbHYsIGNvdW50KTsKIAogCXJlZyA9IGdldF90bWRzX2luZGV4X3JlZyhiaW9zLT5kZXYsIG1sdik7CiAJaWYgKCFyZWcpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IHRtZHNhZGRyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzICsgaSAqIDJdOwpAQCAtMTUyMSwxMCArMTUyMSwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCB0bWRzYWRkcik7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY3JfaWR4X2Fkcl9sYXRjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTU0NywxMSArMTU0NywxMiBAQAogCXVpbnQ4X3QgY3J0Y2luZGV4MiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBiYXNlYWRkciA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNF07CisJaW50IGxlbiA9IDUgKyBjb3VudDsKIAl1aW50OF90IG9sZGFkZHIsIGRhdGE7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSW5kZXgxOiAweCUwMlgsIEluZGV4MjogMHglMDJYLCAiCiAJCSAgICAgICJCYXNlQWRkcjogMHglMDJYLCBDb3VudDogMHglMDJYXG4iLApAQCAtMTU2OCwxMCArMTU2OSwxMCBAQAogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleDEsIG9sZGFkZHIpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY3Ioc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTU5Miw3ICsxNTkzLDcgQEAKIAl1aW50OF90IHZhbHVlOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA0OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsIERhdGE6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBjcnRjaW5kZXgsIG1hc2ssIGRhdGEpOwpAQCAtMTYwMSwxMCArMTYwMiwxMCBAQAogCXZhbHVlIHw9IGRhdGE7CiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleCwgdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDQ7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2NyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE2MjEsMTQgKzE2MjIsMTQgQEAKIAl1aW50OF90IGRhdGEgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleCwgZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fY3JfZ3JvdXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTY0NSwxOCArMTY0NiwxOSBAQAogCSAqLwogCiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CisJaW50IGxlbiA9IDIgKyBjb3VudCAqIDI7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQlpbml0X3ptX2NyKGJpb3MsIG9mZnNldCArIDIgKyAyICogaSAtIDEsIGlleGVjKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmRpdGlvbl90aW1lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTY4MCw3ICsxNjgyLDcgQEAKIAl1bnNpZ25lZCBjbnQ7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlpZiAocmV0cmllcyA+IDEwMCkKIAkJcmV0cmllcyA9IDEwMDsKQEAgLTE3MTEsMTAgKzE3MTMsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fcmVnX3NlcXVlbmNlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE3MzQsMTAgKzE3MzYsMTEgQEAKIAogCXVpbnQzMl90IGJhc2VyZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAl1aW50MzJfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudCAqIDQ7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQmFzZVJlZzogMHglMDhYLCBDb3VudDogMHglMDJYXG4iLAogCQlvZmZzZXQsIGJhc2VyZWcsIGNvdW50KTsKQEAgLTE3NDksMTAgKzE3NTIsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfc3ViX2RpcmVjdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNzY4LDcgKzE3NzEsNyBAQAogCXVpbnQxNl90IHN1Yl9vZmZzZXQgPSBST00xNihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRXhlY3V0aW5nIHN1YnJvdXRpbmUgYXQgMHglMDRYXG4iLAogCQlvZmZzZXQsIHN1Yl9vZmZzZXQpOwpAQCAtMTc3NywxMCArMTc4MCwxMCBAQAogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBFbmQgb2YgMHglMDRYIHN1YnJvdXRpbmVcbiIsIG9mZnNldCwgc3ViX29mZnNldCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29weV9udl9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTgwOCw3ICsxODExLDcgQEAKIAl1aW50MzJfdCBzcmN2YWx1ZSwgZHN0dmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDIyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBTcmNSZWc6IDB4JTA4WCwgU2hpZnQ6IDB4JTAyWCwgU3JjTWFzazogMHglMDhYLCAiCiAJCSAgICAgICJYb3I6IDB4JTA4WCwgRHN0UmVnOiAweCUwOFgsIERzdE1hc2s6IDB4JTA4WFxuIiwKQEAgLTE4MjcsMTAgKzE4MzAsMTAgQEAKIAogCWJpb3Nfd3IzMihiaW9zLCBkc3RyZWcsIGRzdHZhbHVlIHwgc3JjdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDIyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9pbmRleF9pbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xODQ4LDE0ICsxODUxLDE0IEBACiAJdWludDhfdCBkYXRhID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0XTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgsIGRhdGEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDU7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbXB1dGVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE5MDQsNyArMTkwNyw3IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gYmlvcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE7CiAKIAkvKgogCSAqIE9uIGV2ZXJ5IGNhcmQgSSd2ZSBzZWVuLCB0aGlzIHN0ZXAgZ2V0cyBkb25lIGZvciB1cyBlYXJsaWVyIGluCkBAIC0xOTIyLDEwICsxOTI1LDEwIEBACiAJLyogd3JpdGUgYmFjayB0aGUgc2F2ZWQgY29uZmlndXJhdGlvbiB2YWx1ZSAqLwogCWJpb3Nfd3IzMihiaW9zLCBOVl9QRkJfQ0ZHMCwgYmlvcy0+c3RhdGUuc2F2ZWRfbnZfcGZiX2NmZzApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3Jlc2V0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE5NTksMTAgKzE5NjIsMTAgQEAKIAlwY2lfbnZfMjAgJj0gfk5WX1BCVVNfUENJX05WXzIwX1JPTV9TSEFET1dfRU5BQkxFRDsJLyogMHhmZmZmZmZmZSAqLwogCWJpb3Nfd3IzMihiaW9zLCBOVl9QQlVTX1BDSV9OVl8yMCwgcGNpX252XzIwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZmlndXJlX21lbShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTk4Myw3ICsxOTg2LDcgQEAKIAl1aW50MzJfdCByZWcsIGRhdGE7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9WSU9fU1JYLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgsIGJpb3NfaWR4cHJ0X3JkKAogCQkgICAgICAgYmlvcywgTlZfVklPX1NSWCwgTlZfVklPX1NSX0NMT0NLX0lOREVYKSB8IDB4MjApOwpAQCAtMjAxNSwxMCArMjAxOCwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCBkYXRhKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZmlndXJlX2NsayhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjAzOCw3ICsyMDQxLDcgQEAKIAlpbnQgY2xvY2s7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAljbG9jayA9IFJPTTE2KGJpb3MtPmRhdGFbbWVtaW5pdG9mZnMgKyA0XSkgKiAxMDsKIAlzZXRQTEwoYmlvcywgTlZfUFJBTURBQ19OVlBMTF9DT0VGRiwgY2xvY2spOwpAQCAtMjA0OCwxMCArMjA1MSwxMCBAQAogCQljbG9jayAqPSAyOwogCXNldFBMTChiaW9zLCBOVl9QUkFNREFDX01QTExfQ09FRkYsIGNsb2NrKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25maWd1cmVfcHJlaW5pdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTIwNzEsMTUgKzIwNzQsMTUgQEAKIAl1aW50OF90IGNyM2MgPSAoKHN0cmFwcyA8PCAyKSAmIDB4ZjApIHwgKHN0cmFwcyAmICgxIDw8IDYpKTsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uID4gMikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX0NJT19DUlhfX0NPTE9SLAogCQkJICAgICBOVl9DSU9fQ1JFX1NDUkFUQ0g0X19JTkRFWCwgY3IzYyk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjA5OSw3ICsyMTAyLDcgQEAKIAl1aW50OF90IGRhdGEgPSBiaW9zLT5kYXRhW29mZnNldCArIDRdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA1OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIE1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLAogCQlvZmZzZXQsIGNydGNwb3J0LCBtYXNrLCBkYXRhKTsKQEAgLTIxNTgsMTUgKzIxNjEsMTUgQEAKIAkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJCWJpb3Nfd3IzMihiaW9zLCAweDYxNDEwOCArIChpKjB4ODAwKSwgYmlvc19yZDMyKAogCQkJCSAgYmlvcywgMHg2MTQxMDggKyAoaSoweDgwMCkpICYgMHgwZmZmZmZmZik7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAl9CiAKIAliaW9zX3BvcnRfd3IoYmlvcywgY3J0Y3BvcnQsIChiaW9zX3BvcnRfcmQoYmlvcywgY3J0Y3BvcnQpICYgbWFzaykgfAogCQkJCQkJCQkJZGF0YSk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDU7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3N1YihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMTgxLDcgKzIxODQsNyBAQAogCXVpbnQ4X3Qgc3ViID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ2FsbGluZyBzY3JpcHQgJWRcbiIsIG9mZnNldCwgc3ViKTsKIApAQCAtMjE5MSwxMCArMjE5NCwxMCBAQAogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBFbmQgb2Ygc2NyaXB0ICVkXG4iLCBvZmZzZXQsIHN1Yik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmFtX2NvbmRpdGlvbihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjIxNSw3ICsyMjE4LDcgQEAKIAl1aW50OF90IGRhdGE7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlkYXRhID0gYmlvc19yZDMyKGJpb3MsIE5WX1BGQl9CT09UXzApICYgbWFzazsKIApAQCAtMjIyOSwxMCArMjIzMiwxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9udl9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjI1MSwxNyArMjI1NCwxNyBAQAogCXVpbnQzMl90IGRhdGEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDldKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTM7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDhYLCBNYXNrOiAweCUwOFgsIERhdGE6IDB4JTA4WFxuIiwKIAkJb2Zmc2V0LCByZWcsIG1hc2ssIGRhdGEpOwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgKGJpb3NfcmQzMihiaW9zLCByZWcpICYgbWFzaykgfCBkYXRhKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfbWFjcm8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjI4NSw3ICsyMjg4LDcgQEAKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogTWFjcm86IDB4JTAyWCwgTWFjcm9UYWJsZUluZGV4OiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0yMzAwLDEwICsyMzAzLDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIGRhdGEpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9kb25lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzMTUsMTAgKzIzMTgsMTAgQEAKIAkgKi8KIAogCS8qIG1pbGQgcmV0dmFsIGFidXNlIHRvIHN0b3AgcGFyc2luZyB0aGlzIHRhYmxlICovCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yZXN1bWUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjMzMCwxNSArMjMzMywxNSBAQAogCSAqLwogCiAJaWYgKGlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE7CiAKIAlpZXhlYy0+ZXhlY3V0ZSA9IHRydWU7CiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiAtLS0tIEV4ZWN1dGluZyBmb2xsb3dpbmcgY29tbWFuZHMgLS0tLVxuIiwgb2Zmc2V0KTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF90aW1lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzNTMsNyArMjM1Niw3IEBACiAJdW5zaWduZWQgdGltZSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBTbGVlcGluZyBmb3IgMHglMDRYIG1pY3Jvc2Vjb25kc1xuIiwKIAkJb2Zmc2V0LCB0aW1lKTsKQEAgLTIzNjMsMTAgKzIzNjYsMTAgQEAKIAllbHNlCiAJCW1zbGVlcCgodGltZSArIDkwMCkgLyAxMDAwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjM4Myw3ICsyMzg2LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDb25kaXRpb246IDB4JTAyWFxuIiwgb2Zmc2V0LCBjb25kKTsKIApAQCAtMjM5NCwxMCArMjM5NywxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjQxNCw3ICsyNDE3LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJTyBjb25kaXRpb246IDB4JTAyWFxuIiwgb2Zmc2V0LCBjb25kKTsKIApAQCAtMjQyNSwxMCArMjQyOCwxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pbmRleF9pbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNDUxLDcgKzI0NTQsNyBAQAogCXVpbnQ4X3QgdmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDY7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJEYXRhOiAweCUwMlhcbiIsCkBAIC0yNDYwLDEwICsyNDYzLDEwIEBACiAJdmFsdWUgPSAoYmlvc19pZHhwcnRfcmQoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCkgJiBtYXNrKSB8IGRhdGE7CiAJYmlvc19pZHhwcnRfd3IoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCwgdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDY7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNDgxLDE2ICsyNDg0LDE2IEBACiAJdWludDE2X3QgZnJlcSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA3OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBSZWc6IDB4JTA4WCwgRnJlcTogJWQwa0h6XG4iLCBvZmZzZXQsIHJlZywgZnJlcSk7CiAKIAlzZXRQTEwoYmlvcywgcmVnLCBmcmVxICogMTApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDc7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX3JlZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNTA3LDE3ICsyNTEwLDE3IEBACiAJdWludDMyX3QgdmFsdWUgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gOTsKIAogCWlmIChyZWcgPT0gMHgwMDAyMDApCiAJCXZhbHVlIHw9IDE7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCB2YWx1ZSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gOTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmFtX3Jlc3RyaWN0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjU0MywxNCArMjU0NiwxNSBAQAogCXVpbnQ4X3QgdHlwZSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDMyX3QgZnJlcSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMiArIChpbmRleCAqIDQpXSk7CiAJdWludDhfdCAqcGxsX2xpbWl0cyA9ICZiaW9zLT5kYXRhW2Jpb3MtPnBsbF9saW1pdF90YmxfcHRyXSwgKmVudHJ5OworCWludCBsZW4gPSAyICsgYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ICogNDsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJaWYgKCFiaW9zLT5wbGxfbGltaXRfdGJsX3B0ciB8fCAocGxsX2xpbWl0c1swXSAmIDB4ZjApICE9IDB4MzApIHsKIAkJTlZfRVJST1IoZGV2LCAiUExMIGxpbWl0cyB0YWJsZSBub3QgdmVyc2lvbiAzLnhcbiIpOwotCQlyZXR1cm4gdHJ1ZTsgLyogZGVsaWJlcmF0ZSwgYWxsb3cgZGVmYXVsdCBjbG9ja3MgdG8gcmVtYWluICovCisJCXJldHVybiBsZW47IC8qIGRlbGliZXJhdGUsIGFsbG93IGRlZmF1bHQgY2xvY2tzIHRvIHJlbWFpbiAqLwogCX0KIAogCWVudHJ5ID0gcGxsX2xpbWl0cyArIHBsbF9saW1pdHNbMV07CkBAIC0yNTYzLDE1ICsyNTY3LDE1IEBACiAJCQkJb2Zmc2V0LCB0eXBlLCByZWcsIGZyZXEpOwogCiAJCQlzZXRQTEwoYmlvcywgcmVnLCBmcmVxKTsKLQkJCXJldHVybiB0cnVlOworCQkJcmV0dXJuIGxlbjsKIAkJfQogCX0KIAogCU5WX0VSUk9SKGRldiwgIlBMTCB0eXBlIDB4JTAyeCBub3QgZm91bmQgaW4gUExMIGxpbWl0cyB0YWJsZSIsIHR5cGUpOwotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0XzhjKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI1ODEsMTAgKzI1ODUsMTAgQEAKIAkgKgogCSAqLwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0XzhkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI1OTQsMTAgKzI1OTgsMTAgQEAKIAkgKgogCSAqLwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2dwaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjYxNSwxNCArMjYxOSwxNyBAQAogCWNvbnN0IHVpbnQ4X3QgKmdwaW9fZW50cnk7CiAJaW50IGk7CiAKKwlpZiAoIWlleGVjLT5leGVjdXRlKQorCQlyZXR1cm4gMTsKKwogCWlmIChiaW9zLT5iZGNiLnZlcnNpb24gIT0gMHg0MCkgewogCQlOVl9FUlJPUihiaW9zLT5kZXYsICJEQ0IgdGFibGUgbm90IHZlcnNpb24gNC4wXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWJpb3MtPmJkY2IuZ3Bpb190YWJsZV9wdHIpIHsKIAkJTlZfV0FSTihiaW9zLT5kZXYsICJJbnZhbGlkIHBvaW50ZXIgdG8gSU5JVF84RSB0YWJsZVxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZ3Bpb19lbnRyeSA9IGdwaW9fdGFibGUgKyBncGlvX3RhYmxlWzFdOwpAQCAtMjY2MCwxMyArMjY2NywxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgciwgdik7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLS8qIGhhY2sgdG8gYXZvaWQgbW92aW5nIHRoZSBpdGJsX2VudHJ5IGFycmF5IGJlZm9yZSB0aGlzIGZ1bmN0aW9uICovCi1pbnQgaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwX2Jsb2NrbGVuOwotCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTI2OTIsMjEgKzI2OTYsMjEgQEAKIAl1aW50OF90IHJlZ2luY3JlbWVudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNl07CiAJdWludDMyX3Qgc3RyYXBfcmFtY2ZnLCBkYXRhOwotCXVpbnQxNl90IGJsb2NrbGVuOworCS8qIHByZXZpb3VzbHkgc2V0IGJ5ICdNJyBCSVQgdGFibGUgKi8KKwl1aW50MTZfdCBibG9ja2xlbiA9IGJpb3MtPnJhbV9yZXN0cmljdF9ncm91cF9jb3VudCAqIDQ7CisJaW50IGxlbiA9IDcgKyBjb3VudCAqIGJsb2NrbGVuOwogCXVpbnQ4X3QgaW5kZXg7CiAJaW50IGk7CiAKLQkvKiBwcmV2aW91c2x5IHNldCBieSAnTScgQklUIHRhYmxlICovCi0JYmxvY2tsZW4gPSBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXBfYmxvY2tsZW47CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWlmICghYmxvY2tsZW4pIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IFplcm8gYmxvY2sgbGVuZ3RoIC0gaGFzIHRoZSBNIHRhYmxlICIKIAkJCSAiYmVlbiBwYXJzZWQ/XG4iLCBvZmZzZXQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCXN0cmFwX3JhbWNmZyA9IChiaW9zX3JkMzIoYmlvcywgTlZfUEVYVERFVl9CT09UXzApID4+IDIpICYgMHhmOwpAQCAtMjcyNCwxMCArMjcyOCwxMCBAQAogCQlyZWcgKz0gcmVnaW5jcmVtZW50OwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvcHlfem1fcmVnKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI3NDQsMTQgKzI3NDgsMTQgQEAKIAl1aW50MzJfdCBkc3RyZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gOTsKIAogCWJpb3Nfd3IzMihiaW9zLCBkc3RyZWcsIGJpb3NfcmQzMihiaW9zLCBzcmNyZWcpKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA5OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9yZWdfZ3JvdXBfYWRkcl9sYXRjaGVkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTI3NjksMjAgKzI3NzMsMjEgQEAKIAogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCWludCBsZW4gPSA2ICsgY291bnQgKiA0OwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50MzJfdCBkYXRhID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA2ICsgNCAqIGldKTsKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmVzZXJ2ZWQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjc5MywxMCArMjc5OCwxMCBAQAogCSAqIFNlZW1pbmdseSBkb2VzIG5vdGhpbmcKIAkgKi8KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF85NihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODI5LDEzICsyODM0LDEzIEBACiAJdmFsIDw8PSBiaW9zLT5kYXRhW29mZnNldCArIDE2XTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTc7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCAoYmlvc19yZDMyKGJpb3MsIHJlZykgJiBtYXNrKSB8IHZhbCk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE3OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF85NyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODU5LDEzICsyODY0LDEzIEBACiAJdmFsID0gKHZhbCAmIG1hc2spIHwgKCh2YWwgKyBhZGQpICYgfm1hc2spOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxMzsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIHZhbCk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDEzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9hdXhjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODgzLDMyICsyODg4LDMzIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqYXV4Y2g7CiAJdWludDMyX3QgYWRkciA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwotCXVpbnQ4X3QgbGVuID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwlpbnQgbGVuID0gNiArIGNvdW50ICogMjsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlhdXhjaCA9IGluaXRfaTJjX2RldmljZV9maW5kKGRldiwgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7CiAJaWYgKCFhdXhjaCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiBjb3VsZG4ndCBnZXQgYXV4Y2ggJWRcbiIsCiAJCQkgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlvZmZzZXQgKz0gNjsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIG9mZnNldCArPSAyKSB7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIG9mZnNldCArPSAyKSB7CiAJCXVpbnQ4X3QgZGF0YTsKIAogCQlyZXQgPSBub3V2ZWF1X2RwX2F1eGNoKGF1eGNoLCA5LCBhZGRyLCAmZGF0YSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IHJkIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWRhdGEgJj0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAwXTsKQEAgLTI5MTcsMTQgKzI5MjMsMTQgQEAKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOCwgYWRkciwgJmRhdGEsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiB3ciBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9hdXhjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yOTQxLDEwNiArMjk0Nyw5OSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmF1eGNoOwogCXVpbnQzMl90IGFkZHIgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKLQl1aW50OF90IGxlbiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudDsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlhdXhjaCA9IGluaXRfaTJjX2RldmljZV9maW5kKGRldiwgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7CiAJaWYgKCFhdXhjaCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiBjb3VsZG4ndCBnZXQgYXV4Y2ggJWRcbiIsCiAJCQkgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlvZmZzZXQgKz0gNjsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIG9mZnNldCsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIG9mZnNldCsrKSB7CiAJCXJldCA9IG5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDgsIGFkZHIsICZiaW9zLT5kYXRhW29mZnNldF0sIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiB3ciBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgc3RydWN0IGluaXRfdGJsX2VudHJ5IGl0YmxfZW50cnlbXSA9IHsKIAkvKiBjb21tYW5kIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICwgaWQgICwgbGVuZ3RoICAsIG9mZnNldCAgLCBtdWx0ICAgICwgY29tbWFuZCBoYW5kbGVyICAgICAgICAgICAgICAgICAqLwogCS8qIElOSVRfUFJPRyAoMHgzMSwgMTUsIDEwLCA0KSByZW1vdmVkIGR1ZSB0byBubyBleGFtcGxlIG9mIHVzZSAqLwotCXsgIklOSVRfSU9fUkVTVFJJQ1RfUFJPRyIgICAgICAgICAgICAgLCAweDMyLCAxMSAgICAgICwgNiAgICAgICAsIDQgICAgICAgLCBpbml0X2lvX3Jlc3RyaWN0X3Byb2cgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzMsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVwZWF0ICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgICwgMHgzNCwgMTIgICAgICAsIDcgICAgICAgLCAyICAgICAgICwgaW5pdF9pb19yZXN0cmljdF9wbGwgICAgICAgICAgICB9LAotCXsgIklOSVRfRU5EX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgLCAweDM2LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2VuZF9yZXBlYXQgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT1BZIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzcsIDExICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29weSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX05PVCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzOCwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9ub3QgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fRkxBR19DT05ESVRJT04iICAgICAgICAgICAgLCAweDM5LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2lvX2ZsYWdfY29uZGl0aW9uICAgICAgICAgIH0sCi0JeyAiSU5JVF9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAgICAsIDB4NDksIDE4ICAgICAgLCAxNyAgICAgICwgMiAgICAgICAsIGluaXRfaWR4X2FkZHJfbGF0Y2hlZCAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTDIiICAgICAgICAgICAgICwgMHg0QSwgMTEgICAgICAsIDYgICAgICAgLCA0ICAgICAgICwgaW5pdF9pb19yZXN0cmljdF9wbGwyICAgICAgICAgICB9LAotCXsgIklOSVRfUExMMiIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRCLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3BsbDIgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JMkNfQllURSIgICAgICAgICAgICAgICAgICAgICAsIDB4NEMsIDQgICAgICAgLCAzICAgICAgICwgMyAgICAgICAsIGluaXRfaTJjX2J5dGUgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICwgMHg0RCwgNCAgICAgICAsIDMgICAgICAgLCAyICAgICAgICwgaW5pdF96bV9pMmNfYnl0ZSAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fSTJDIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDRFLCA0ICAgICAgICwgMyAgICAgICAsIDEgICAgICAgLCBpbml0X3ptX2kyYyAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9UTURTIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEYsIDUgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfdG1kcyAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1RNRFNfR1JPVVAiICAgICAgICAgICAgICAgICwgMHg1MCwgMyAgICAgICAsIDIgICAgICAgLCAyICAgICAgICwgaW5pdF96bV90bWRzX2dyb3VwICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ1JfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgLCAweDUxLCA1ICAgICAgICwgNCAgICAgICAsIDEgICAgICAgLCBpbml0X2NyX2lkeF9hZHJfbGF0Y2ggICAgICAgICAgIH0sCi0JeyAiSU5JVF9DUiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTIsIDQgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY3IgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MywgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF96bV9jciAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fQ1JfR1JPVVAiICAgICAgICAgICAgICAgICAgLCAweDU0LCAyICAgICAgICwgMSAgICAgICAsIDIgICAgICAgLCBpbml0X3ptX2NyX2dyb3VwICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05ESVRJT05fVElNRSIgICAgICAgICAgICAgICAsIDB4NTYsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZGl0aW9uX3RpbWUgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1JFR19TRVFVRU5DRSIgICAgICAgICAgICAgICwgMHg1OCwgNiAgICAgICAsIDUgICAgICAgLCA0ICAgICAgICwgaW5pdF96bV9yZWdfc2VxdWVuY2UgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fUkVTVFJJQ1RfUFJPRyIgICAgICAgICAgICAgLCAweDMyLCBpbml0X2lvX3Jlc3RyaWN0X3Byb2cgICAgICAgICAgIH0sCisJeyAiSU5JVF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzMsIGluaXRfcmVwZWF0ICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgICwgMHgzNCwgaW5pdF9pb19yZXN0cmljdF9wbGwgICAgICAgICAgICB9LAorCXsgIklOSVRfRU5EX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgLCAweDM2LCBpbml0X2VuZF9yZXBlYXQgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT1BZIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzcsIGluaXRfY29weSAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX05PVCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzOCwgaW5pdF9ub3QgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fRkxBR19DT05ESVRJT04iICAgICAgICAgICAgLCAweDM5LCBpbml0X2lvX2ZsYWdfY29uZGl0aW9uICAgICAgICAgIH0sCisJeyAiSU5JVF9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAgICAsIDB4NDksIGluaXRfaWR4X2FkZHJfbGF0Y2hlZCAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTDIiICAgICAgICAgICAgICwgMHg0QSwgaW5pdF9pb19yZXN0cmljdF9wbGwyICAgICAgICAgICB9LAorCXsgIklOSVRfUExMMiIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRCLCBpbml0X3BsbDIgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JMkNfQllURSIgICAgICAgICAgICAgICAgICAgICAsIDB4NEMsIGluaXRfaTJjX2J5dGUgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICwgMHg0RCwgaW5pdF96bV9pMmNfYnl0ZSAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fSTJDIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDRFLCBpbml0X3ptX2kyYyAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9UTURTIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEYsIGluaXRfdG1kcyAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1RNRFNfR1JPVVAiICAgICAgICAgICAgICAgICwgMHg1MCwgaW5pdF96bV90bWRzX2dyb3VwICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ1JfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgLCAweDUxLCBpbml0X2NyX2lkeF9hZHJfbGF0Y2ggICAgICAgICAgIH0sCisJeyAiSU5JVF9DUiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTIsIGluaXRfY3IgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MywgaW5pdF96bV9jciAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fQ1JfR1JPVVAiICAgICAgICAgICAgICAgICAgLCAweDU0LCBpbml0X3ptX2NyX2dyb3VwICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05ESVRJT05fVElNRSIgICAgICAgICAgICAgICAsIDB4NTYsIGluaXRfY29uZGl0aW9uX3RpbWUgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1JFR19TRVFVRU5DRSIgICAgICAgICAgICAgICwgMHg1OCwgaW5pdF96bV9yZWdfc2VxdWVuY2UgICAgICAgICAgICB9LAogCS8qIElOSVRfSU5ESVJFQ1RfUkVHICgweDVBLCA3LCAwLCAwKSByZW1vdmVkIGR1ZSB0byBubyBleGFtcGxlIG9mIHVzZSAqLwotCXsgIklOSVRfU1VCX0RJUkVDVCIgICAgICAgICAgICAgICAgICAgLCAweDVCLCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3N1Yl9kaXJlY3QgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT1BZX05WX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4NUYsIDIyICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29weV9udl9yZWcgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICwgMHg2MiwgNSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF96bV9pbmRleF9pbyAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09NUFVURV9NRU0iICAgICAgICAgICAgICAgICAgLCAweDYzLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbXB1dGVfbWVtICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SRVNFVCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjUsIDEzICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVzZXQgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkZJR1VSRV9NRU0iICAgICAgICAgICAgICAgICwgMHg2NiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25maWd1cmVfbWVtICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORklHVVJFX0NMSyIgICAgICAgICAgICAgICAgLCAweDY3LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmZpZ3VyZV9jbGsgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05GSUdVUkVfUFJFSU5JVCIgICAgICAgICAgICAsIDB4NjgsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZmlndXJlX3ByZWluaXQgICAgICAgICAgfSwKLQl7ICJJTklUX0lPIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2OSwgNSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9pbyAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfU1VCIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZCLCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3N1YiAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SQU1fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAsIDB4NkQsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmFtX2NvbmRpdGlvbiAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX05WX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RSwgMTMgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9udl9yZWcgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfTUFDUk8iICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZGLCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X21hY3JvICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9ET05FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzEsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1JFU1VNRSIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXN1bWUgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfU1VCX0RJUkVDVCIgICAgICAgICAgICAgICAgICAgLCAweDVCLCBpbml0X3N1Yl9kaXJlY3QgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT1BZX05WX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4NUYsIGluaXRfY29weV9udl9yZWcgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICwgMHg2MiwgaW5pdF96bV9pbmRleF9pbyAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09NUFVURV9NRU0iICAgICAgICAgICAgICAgICAgLCAweDYzLCBpbml0X2NvbXB1dGVfbWVtICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SRVNFVCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjUsIGluaXRfcmVzZXQgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkZJR1VSRV9NRU0iICAgICAgICAgICAgICAgICwgMHg2NiwgaW5pdF9jb25maWd1cmVfbWVtICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORklHVVJFX0NMSyIgICAgICAgICAgICAgICAgLCAweDY3LCBpbml0X2NvbmZpZ3VyZV9jbGsgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05GSUdVUkVfUFJFSU5JVCIgICAgICAgICAgICAsIDB4NjgsIGluaXRfY29uZmlndXJlX3ByZWluaXQgICAgICAgICAgfSwKKwl7ICJJTklUX0lPIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2OSwgaW5pdF9pbyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfU1VCIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZCLCBpbml0X3N1YiAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SQU1fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAsIDB4NkQsIGluaXRfcmFtX2NvbmRpdGlvbiAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX05WX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RSwgaW5pdF9udl9yZWcgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfTUFDUk8iICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZGLCBpbml0X21hY3JvICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9ET05FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzEsIGluaXRfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JFU1VNRSIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MiwgaW5pdF9yZXN1bWUgICAgICAgICAgICAgICAgICAgICB9LAogCS8qIElOSVRfUkFNX0NPTkRJVElPTjIgKDB4NzMsIDksIDAsIDApIHJlbW92ZWQgZHVlIHRvIG5vIGV4YW1wbGUgb2YgdXNlICovCi0JeyAiSU5JVF9USU1FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzQsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfdGltZSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICAgICwgMHg3NSwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25kaXRpb24gICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAgLCAweDc2LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2lvX2NvbmRpdGlvbiAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JTkRFWF9JTyIgICAgICAgICAgICAgICAgICAgICAsIDB4NzgsIDYgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfaW5kZXhfaW8gICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1BMTCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3OSwgNyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9wbGwgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fUkVHIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDdBLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3ptX3JlZyAgICAgICAgICAgICAgICAgICAgIH0sCi0JLyogSU5JVF9SQU1fUkVTVFJJQ1RfUExMJ3MgbGVuZ3RoIGlzIGFkanVzdGVkIGJ5IHRoZSBCSVQgTSB0YWJsZSAqLwotCXsgIklOSVRfUkFNX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgLCAweDg3LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3JhbV9yZXN0cmljdF9wbGwgICAgICAgICAgIH0sCi0JeyAiSU5JVF84QyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEMsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOGMgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUXzhEIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RCwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF84ZCAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfR1BJTyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhFLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2dwaW8gICAgICAgICAgICAgICAgICAgICAgIH0sCi0JLyogSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQJ3MgbXVsdCBpcyBsb2FkZWQgYnkgTSB0YWJsZSBpbiBCSVQgKi8KLQl7ICJJTklUX1JBTV9SRVNUUklDVF9aTV9SRUdfR1JPVVAiICAgICwgMHg4RiwgNyAgICAgICAsIDYgICAgICAgLCAwICAgICAgICwgaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwICB9LAotCXsgIklOSVRfQ09QWV9aTV9SRUciICAgICAgICAgICAgICAgICAgLCAweDkwLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvcHlfem1fcmVnICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9SRUdfR1JPVVBfQUREUkVTU19MQVRDSEVEIiAsIDB4OTEsIDYgICAgICAgLCA1ICAgICAgICwgNCAgICAgICAsIGluaXRfem1fcmVnX2dyb3VwX2FkZHJfbGF0Y2hlZCAgfSwKLQl7ICJJTklUX1JFU0VSVkVEIiAgICAgICAgICAgICAgICAgICAgICwgMHg5MiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXNlcnZlZCAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfOTYiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk2LCAxNyAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0Xzk2ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF85NyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTcsIDEzICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOTcgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5OCwgNiAgICAgICAsIDUgICAgICAgLCAyICAgICAgICwgaW5pdF9hdXhjaCAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fQVVYQ0giICAgICAgICAgICAgICAgICAgICAgLCAweDk5LCA2ICAgICAgICwgNSAgICAgICAsIDEgICAgICAgLCBpbml0X3ptX2F1eGNoICAgICAgICAgICAgICAgICAgIH0sCi0JeyBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAsIDAgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCXsgIklOSVRfVElNRSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDc0LCBpbml0X3RpbWUgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05ESVRJT04iICAgICAgICAgICAgICAgICAgICAsIDB4NzUsIGluaXRfY29uZGl0aW9uICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICwgMHg3NiwgaW5pdF9pb19jb25kaXRpb24gICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgICAgLCAweDc4LCBpbml0X2luZGV4X2lvICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9QTEwiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzksIGluaXRfcGxsICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3QSwgaW5pdF96bV9yZWcgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkFNX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgLCAweDg3LCBpbml0X3JhbV9yZXN0cmljdF9wbGwgICAgICAgICAgIH0sCisJeyAiSU5JVF84QyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEMsIGluaXRfOGMgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUXzhEIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RCwgaW5pdF84ZCAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfR1BJTyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhFLCBpbml0X2dwaW8gICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQIiAgICAsIDB4OEYsIGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cCAgfSwKKwl7ICJJTklUX0NPUFlfWk1fUkVHIiAgICAgICAgICAgICAgICAgICwgMHg5MCwgaW5pdF9jb3B5X3ptX3JlZyAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fUkVHX0dST1VQX0FERFJFU1NfTEFUQ0hFRCIgLCAweDkxLCBpbml0X3ptX3JlZ19ncm91cF9hZGRyX2xhdGNoZWQgIH0sCisJeyAiSU5JVF9SRVNFUlZFRCIgICAgICAgICAgICAgICAgICAgICAsIDB4OTIsIGluaXRfcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUXzk2IiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5NiwgaW5pdF85NiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfOTciICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk3LCBpbml0Xzk3ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9BVVhDSCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTgsIGluaXRfYXV4Y2ggICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICwgMHg5OSwgaW5pdF96bV9hdXhjaCAgICAgICAgICAgICAgICAgICB9LAorCXsgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2luaXRfdGFibGVfZW50cnlfbGVuZ3RoKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBpKQotewotCS8qIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIGdpdmVuIGluaXQgdGFibGUgZW50cnkuICovCi0JcmV0dXJuIGl0YmxfZW50cnlbaV0ubGVuZ3RoICsgYmlvcy0+ZGF0YVtvZmZzZXQgKyBpdGJsX2VudHJ5W2ldLmxlbmd0aF9vZmZzZXRdKml0YmxfZW50cnlbaV0ubGVuZ3RoX211bHRpcGxpZXI7Ci19Ci0KICNkZWZpbmUgTUFYX1RBQkxFX09QUyAxMDAwCiAKIHN0YXRpYyBpbnQKQEAgLTMwNTYsNyArMzA1NSw3IEBACiAJICogaXMgY2hhbmdlZCBiYWNrIHRvIEVYRUNVVEUuCiAJICovCiAKLQlpbnQgY291bnQgPSAwLCBpOworCWludCBjb3VudCA9IDAsIGksIHJlczsKIAl1aW50OF90IGlkOwogCiAJLyoKQEAgLTMwNzYsMjIgKzMwNzUsMjEgQEAKIAkJCQlvZmZzZXQsIGl0YmxfZW50cnlbaV0uaWQsIGl0YmxfZW50cnlbaV0ubmFtZSk7CiAKIAkJCS8qIGV4ZWN1dGUgZXZlbnR1YWwgY29tbWFuZCBoYW5kbGVyICovCi0JCQlpZiAoaXRibF9lbnRyeVtpXS5oYW5kbGVyKQotCQkJCWlmICghKCppdGJsX2VudHJ5W2ldLmhhbmRsZXIpKGJpb3MsIG9mZnNldCwgaWV4ZWMpKQotCQkJCQlicmVhazsKKwkJCXJlcyA9ICgqaXRibF9lbnRyeVtpXS5oYW5kbGVyKShiaW9zLCBvZmZzZXQsIGlleGVjKTsKKwkJCWlmICghcmVzKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIEFkZCB0aGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgaW5jbHVkaW5nIGFsbCBkYXRhCisJCQkgKiBvZiB0aGF0IGNvbW1hbmQuIFRoZSBvZmZzZXQgd2lsbCB0aGVuIGJlIHBvaW50aW5nIG9uIHRoZQorCQkJICogbmV4dCBvcCBjb2RlLgorCQkJICovCisJCQlvZmZzZXQgKz0gcmVzOwogCQl9IGVsc2UgewogCQkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJCSAiMHglMDRYOiBJbml0IHRhYmxlIGNvbW1hbmQgbm90IGZvdW5kOiAiCiAJCQkJICIweCUwMlhcbiIsIG9mZnNldCwgaWQpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KLQotCQkvKgotCQkgKiBBZGQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBjb21tYW5kIGluY2x1ZGluZyBhbGwgZGF0YQotCQkgKiBvZiB0aGF0IGNvbW1hbmQuIFRoZSBvZmZzZXQgd2lsbCB0aGVuIGJlIHBvaW50aW5nIG9uIHRoZQotCQkgKiBuZXh0IG9wIGNvZGUuCi0JCSAqLwotCQlvZmZzZXQgKz0gZ2V0X2luaXRfdGFibGVfZW50cnlfbGVuZ3RoKGJpb3MsIG9mZnNldCwgaSk7CiAJfQogCiAJaWYgKG9mZnNldCA+PSBiaW9zLT5sZW5ndGgpCkBAIC0zODU0LDcgKzM4NTIsNyBAQAogCSAqIHNjcmlwdCB0YWJsZXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzY3JpcHQgdG8gZXhlY3V0ZS4KIAkgKi8KIAotCU5WX0RFQlVHKGRldiwgIlNlYXJjaGluZyBmb3Igb3V0cHV0IGVudHJ5IGZvciAlZCAlZCAlZFxuIiwKKwlOVl9ERUJVR19LTVMoZGV2LCAiU2VhcmNoaW5nIGZvciBvdXRwdXQgZW50cnkgZm9yICVkICVkICVkXG4iLAogCQkJZGNiZW50LT50eXBlLCBkY2JlbnQtPmxvY2F0aW9uLCBkY2JlbnQtPm9yKTsKIAlvdGFibGUgPSBiaW9zX291dHB1dF9jb25maWdfbWF0Y2goZGV2LCBkY2JlbnQsIHRhYmxlWzFdICsKIAkJCQkJICBiaW9zLT5kaXNwbGF5LnNjcmlwdF90YWJsZV9wdHIsCkBAIC0zODg0LDcgKzM4ODIsNyBAQAogCWlmIChweGNsayA9PSAwKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVs2XSk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDAgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDAgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM4OTQsNyArMzg5Miw3IEBACiAJaWYgKHB4Y2xrID09IC0xKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVs4XSk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MDcsNyArMzkwNSw3IEBACiAJCWVsc2UKIAkJCXNjcmlwdCA9IDA7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDIgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDIgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MzEsNyArMzkyOSw3IEBACiAJCWlmIChzY3JpcHQpCiAJCQlzY3JpcHQgPSBjbGtjbXB0YWJsZShiaW9zLCBzY3JpcHQsIC1weGNsayk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJjbG9jayBzY3JpcHQgMSBub3QgZm91bmRcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgImNsb2NrIHNjcmlwdCAxIG5vdCBmb3VuZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC00NjA2LDEwICs0NjA0LDYgQEAKIAkgKiBzdHVmZiB0aGF0IHdlIGRvbid0IHVzZSAtIHRoZWlyIHVzZSBjdXJyZW50bHkgdW5rbm93bgogCSAqLwogCi0JdWludDE2X3QgcnJfc3RyYXBfeGxhdDsKLQl1aW50OF90IHJyX2dyb3VwX2NvdW50OwotCWludCBpOwotCiAJLyoKIAkgKiBPbGRlciBiaW9zIHZlcnNpb25zIGRvbid0IGhhdmUgYSBzdWZmaWNpZW50bHkgbG9uZyB0YWJsZSBmb3IKIAkgKiB3aGF0IHdlIHdhbnQKQEAgLTQ2MTgsMjQgKzQ2MTIsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYml0ZW50cnktPmlkWzFdIDwgMikgewotCQlycl9ncm91cF9jb3VudCA9IGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDJdOwotCQlycl9zdHJhcF94bGF0ID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgM10pOworCQliaW9zLT5yYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAyXTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X3RibF9wdHIgPSBST00xNihiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAzXSk7CiAJfSBlbHNlIHsKLQkJcnJfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAwXTsKLQkJcnJfc3RyYXBfeGxhdCA9IFJPTTE2KGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDFdKTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ID0gYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMF07CisJCWJpb3MtPnJhbV9yZXN0cmljdF90YmxfcHRyID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMV0pOwogCX0KIAotCS8qIGFkanVzdCBsZW5ndGggb2YgSU5JVF84NyAqLwotCWZvciAoaSA9IDA7IGl0YmxfZW50cnlbaV0ubmFtZSAmJiAoaXRibF9lbnRyeVtpXS5pZCAhPSAweDg3KTsgaSsrKTsKLQlpdGJsX2VudHJ5W2ldLmxlbmd0aCArPSBycl9ncm91cF9jb3VudCAqIDQ7Ci0KLQkvKiBzZXQgdXAgbXVsdGlwbGllciBmb3IgSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQICovCi0JZm9yICg7IGl0YmxfZW50cnlbaV0ubmFtZSAmJiAoaXRibF9lbnRyeVtpXS5pZCAhPSAweDhmKTsgaSsrKTsKLQlpdGJsX2VudHJ5W2ldLmxlbmd0aF9tdWx0aXBsaWVyID0gcnJfZ3JvdXBfY291bnQgKiA0OwotCi0JaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwX2Jsb2NrbGVuID0gaXRibF9lbnRyeVtpXS5sZW5ndGhfbXVsdGlwbGllcjsKLQliaW9zLT5yYW1fcmVzdHJpY3RfdGJsX3B0ciA9IHJyX3N0cmFwX3hsYXQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIzNCw3ICs1MjE3LDcgQEAKIAlpbnQgaTsKIAogCWlmICghYmlvcy0+YmRjYi5jb25uZWN0b3JfdGFibGVfcHRyKSB7Ci0JCU5WX0RFQlVHKGRldiwgIk5vIERDQiBjb25uZWN0b3IgdGFibGUgcHJlc2VudFxuIik7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJObyBEQ0IgY29ubmVjdG9yIHRhYmxlIHByZXNlbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCmluZGV4IDFkNWYxMGIuLjA1OGU5OGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaApAQCAtMjI3LDYgKzIyNyw3IEBACiAKIAl1aW50MTZfdCBwbGxfbGltaXRfdGJsX3B0cjsKIAl1aW50MTZfdCByYW1fcmVzdHJpY3RfdGJsX3B0cjsKKwl1aW50OF90IHJhbV9yZXN0cmljdF9ncm91cF9jb3VudDsKIAogCXVpbnQxNl90IHNvbWVfc2NyaXB0X3B0cjsgLyogQklUIEkgKyAxNCAqLwogCXVpbnQxNl90IGluaXQ5Nl90YmxfcHRyOyAvKiBCSVQgSSArIDE2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggYWEyZGZiYy4uMGNhZDZkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKQEAgLTE1NCw2ICsxNTQsMTEgQEAKIAludmJvLT5wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBudmJvLT5wbGFjZW1lbnRzOwogCW52Ym8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gbjsKIAludmJvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gbjsKKworCWlmIChudmJvLT5waW5fcmVmY250KSB7CisJCXdoaWxlIChuLS0pCisJCQludmJvLT5wbGFjZW1lbnRzW25dIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCX0KIH0KIAogaW50CkBAIC00MDAsMTAgKzQwNSwxNiBAQAogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CiAKIAlzd2l0Y2ggKGJvLT5tZW0ubWVtX3R5cGUpIHsKKwljYXNlIFRUTV9QTF9WUkFNOgorCQlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgVFRNX1BMX0ZMQUdfVFQgfAorCQkJCQkgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CiAJCWJyZWFrOwogCX0KKworCSpwbCA9IG52Ym8tPnBsYWNlbWVudDsKIH0KIAogCkBAIC00NTUsMTEgKzQ2Niw4IEBACiAJaW50IHJldDsKIAogCWNoYW4gPSBudmJvLT5jaGFubmVsOwotCWlmICghY2hhbiB8fCBudmJvLT50aWxlX2ZsYWdzIHx8IG52Ym8tPm5vX3ZtKSB7CisJaWYgKCFjaGFuIHx8IG52Ym8tPnRpbGVfZmxhZ3MgfHwgbnZiby0+bm9fdm0pCiAJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKLQkJaWYgKCFjaGFuKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJc3JjX29mZnNldCA9IG9sZF9tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJZHN0X29mZnNldCA9IG5ld19tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CkBAIC02MjUsNyArNjMzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCisJaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUgfHwKKwkgICAgIWRldl9wcml2LT5jaGFubmVsKQogCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSk7CiAKIAlpZiAob2xkX21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1NZU1RFTSAmJiAhYm8tPnR0bSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggMDMyY2YwOS4uNWExMGRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC04Niw3ICs4Niw3IEBACiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihkcm1fY29ubmVjdG9yKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNvbm5lY3RvcikKIAkJcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJLyogVXNlIHByZWZlcnJlZCBtb2RlIGlmIHRoZXJlIGlzIG9uZS4uICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5iYXNlLnByb2JlZF9tb2RlcywgaGVhZCkgewogCQlpZiAobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJuYXRpdmUgbW9kZSBmcm9tIHByZWZlcnJlZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAibmF0aXZlIG1vZGUgZnJvbSBwcmVmZXJyZWRcbiIpOwogCQkJcmV0dXJuIGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwogCQl9CiAJfQpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCWxhcmdlc3QgPSBtb2RlOwogCX0KIAotCU5WX0RFQlVHKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCisJTlZfREVCVUdfS01TKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCiAJCSAgICAgIGhpZ2hfdywgaGlnaF9oLCBoaWdoX3YpOwogCXJldHVybiBsYXJnZXN0ID8gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbGFyZ2VzdCkgOiBOVUxMOwogfQpAQCAtNzI1LDcgKzcyNSw3IEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKm52X2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfY29ubmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCmluZGV4IGRlNjFmNDYuLjllMjkyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CisJTlZfREVCVUdfS01TKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CiAKIAkvKiBLZWVwIGFsbCBsYW5lcyBhdCB0aGUgc2FtZSBsZXZlbC4uICovCiAJZm9yIChpID0gMDsgaSA8IG52X2VuY29kZXItPmRwLmxpbmtfbnI7IGkrKykgewpAQCAtMjI4LDcgKzIyOCw3IEBACiAJaW50IG9yID0gbnZfZW5jb2Rlci0+b3IsIGxpbmsgPSAhKG52X2VuY29kZXItPmRjYi0+c29yY29uZi5saW5rICYgMSk7CiAJaW50IGRwZV9oZWFkZXJsZW4sIHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRjb25maWcgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdFx0Y29uZmlnIDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJIGNvbmZpZ1swXSwgY29uZmlnWzFdLCBjb25maWdbMl0sIGNvbmZpZ1szXSk7CiAKIAlkcGUgPSBub3V2ZWF1X2Jpb3NfZHBfdGFibGUoZGV2LCBudl9lbmNvZGVyLT5kY2IsICZkcGVfaGVhZGVybGVuKTsKQEAgLTI3NiwxMiArMjc2LDEyIEBACiAJYm9vbCBjcl9kb25lLCBjcl9tYXhfdnMsIGVxX2RvbmU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCi0JTlZfREVCVUcoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKIHRyYWluOgogCWNyX2RvbmUgPSBlcV9kb25lID0gZmFsc2U7CiAKIAkvKiBzZXQgbGluayBjb25maWd1cmF0aW9uICovCi0JTlZfREVCVUcoZGV2LCAiXHRiZWdpbiB0cmFpbjogYncgJWQsIGxhbmVzICVkXG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdGJlZ2luIHRyYWluOiBidyAlZCwgbGFuZXMgJWRcbiIsCiAJCSBudl9lbmNvZGVyLT5kcC5saW5rX2J3LCBudl9lbmNvZGVyLT5kcC5saW5rX25yKTsKIAogCXJldCA9IG5vdXZlYXVfZHBfbGlua19id19zZXQoZW5jb2RlciwgbnZfZW5jb2Rlci0+ZHAubGlua19idyk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogY2xvY2sgcmVjb3ZlcnkgKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGNyXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBjclxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJY3JfZG9uZSA9IHRydWU7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkJZ290byBzdG9wOwogCiAJLyogY2hhbm5lbCBlcXVhbGlzYXRpb24gKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGVxXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBlcVxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzIpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAzKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJZXFfZG9uZSA9IHRydWU7CkBAIC0zOTUsOSArMzk1LDkgQEAKIAogCS8qIHJldHJ5IGF0IGEgbG93ZXIgc2V0dGluZywgaWYgcG9zc2libGUgKi8KIAlpZiAoIXJldCAmJiAhKGVxX2RvbmUgJiYgY3JfZG9uZSkpIHsKLQkJTlZfREVCVUcoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOwogCQlpZiAobnZfZW5jb2Rlci0+ZHAubGlua19idyAhPSBEUF9MSU5LX0JXXzFfNjIpIHsKLQkJCU5WX0RFQlVHKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOwogCQkJbnZfZW5jb2Rlci0+ZHAubGlua19idyA9IERQX0xJTktfQldfMV82MjsKIAkJCWdvdG8gdHJhaW47CiAJCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgImVuY29kZXI6IGxpbmtfYncgJWQsIGxpbmtfbnIgJWRcbiIKKwlOVl9ERUJVR19LTVMoZGV2LCAiZW5jb2RlcjogbGlua19idyAlZCwgbGlua19uciAlZFxuIgogCQkgICAgICAiZGlzcGxheTogbGlua19idyAlZCwgbGlua19uciAlZCB2ZXJzaW9uIDB4JTAyeFxuIiwKIAkJIG52X2VuY29kZXItPmRjYi0+ZHBjb25mLmxpbmtfYncsCiAJCSBudl9lbmNvZGVyLT5kY2ItPmRwY29uZi5saW5rX25yLApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJdWludDMyX3QgdG1wLCBjdHJsLCBzdGF0ID0gMCwgZGF0YTMyWzRdID0ge307CiAJaW50IHJldCA9IDAsIGksIGluZGV4ID0gYXV4Y2gtPnJkOwogCi0JTlZfREVCVUcoZGV2LCAiY2ggJWQgY21kICVkIGFkZHIgMHgleCBsZW4gJWRcbiIsIGluZGV4LCBjbWQsIGFkZHIsIGRhdGFfbnIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJjaCAlZCBjbWQgJWQgYWRkciAweCV4IGxlbiAlZFxuIiwgaW5kZXgsIGNtZCwgYWRkciwgZGF0YV9ucik7CiAKIAl0bXAgPSBudl9yZDMyKGRldiwgTlY1MF9BVVhDSF9DVFJMKGF1eGNoLT5yZCkpOwogCW52X3dyMzIoZGV2LCBOVjUwX0FVWENIX0NUUkwoYXV4Y2gtPnJkKSwgdG1wIHwgMHgwMDEwMDAwMCk7CkBAIC00NzIsNyArNDcyLDcgQEAKIAlpZiAoIShjbWQgJiAxKSkgewogCQltZW1jcHkoZGF0YTMyLCBkYXRhLCBkYXRhX25yKTsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJTlZfREVCVUcoZGV2LCAid3IgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJ3ciAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQkJbnZfd3IzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9PVVQoaW5kZXgsIGkpLCBkYXRhMzJbaV0pOwogCQl9CiAJfQpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaWYgKGNtZCAmIDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwotCQkJTlZfREVCVUcoZGV2LCAicmQgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJyZCAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQl9CiAJCW1lbWNweShkYXRhLCBkYXRhMzIsIGRhdGFfbnIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IDM1MjQ5YzMuLjA2ZWI5OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtMzUsNiArMzUsMTAgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAorTU9EVUxFX1BBUk1fREVTQyhjdHhmdywgIlVzZSBleHRlcm5hbCBmaXJtd2FyZSBibG9iIGZvciBncmN0eCBpbml0IChOVjQwKSIpOworaW50IG5vdXZlYXVfY3R4ZncgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGN0eGZ3LCBub3V2ZWF1X2N0eGZ3LCBpbnQsIDA0MDApOworCiBNT0RVTEVfUEFSTV9ERVNDKG5vYWdwLCAiRGlzYWJsZSBBR1AiKTsKIGludCBub3V2ZWF1X25vYWdwOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vYWdwLCBub3V2ZWF1X25vYWdwLCBpbnQsIDA0MDApOwpAQCAtMjczLDcgKzI3Nyw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7CiAJCQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOwotCQkJaWYgKCFjaGFuKQorCQkJaWYgKCFjaGFuIHx8ICFjaGFuLT5wdXNoYnVmX2JvKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGorKykKQEAgLTM0MSw3ICszNDUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gbm91dmVhdV90dG1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCA4OGI0YzdiLi41ZjhjYmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmVnLmgiCiAjaW5jbHVkZSAibm91dmVhdV9iaW9zLmgiCitzdHJ1Y3Qgbm91dmVhdV9ncmN0eDsKIAogI2RlZmluZSBNQVhfTlVNX0RDQl9FTlRSSUVTIDE2CiAKQEAgLTMxNyw2ICszMTgsNyBAQAogCWJvb2wgYWNjZWxfYmxvY2tlZDsKIAl2b2lkICpjdHhwcm9nOwogCXZvaWQgKmN0eHZhbHM7CisJaW50IGdyY3R4X3NpemU7CiAKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTY0Nyw2ICs2NDksNyBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdHZfbm9ybTsKIGV4dGVybiBpbnQgbm91dmVhdV9yZWdfZGVidWc7CiBleHRlcm4gY2hhciAqbm91dmVhdV92YmlvczsKK2V4dGVybiBpbnQgbm91dmVhdV9jdHhmdzsKIAogLyogbm91dmVhdV9zdGF0ZS5jICovCiBleHRlcm4gdm9pZCBub3V2ZWF1X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqKTsKQEAgLTk1OSw5ICs5NjIsNyBAQAogZXh0ZXJuIHZvaWQgbnY0MF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52NDBfZ3JhcGhfbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjQwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCAgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF92YWxzX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogCiAvKiBudjUwX2dyYXBoLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52NTBfZ3JhcGhfZ3JjbGFzc1tdOwpAQCAtOTc1LDYgKzk3NiwxMiBAQAogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CiAKKy8qIG5vdXZlYXVfZ3JjdHguYyAqLworZXh0ZXJuIGludCAgbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CisKIC8qIG52MDRfaW5zdG1lbS5jICovCiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEyMDcsMTQgKzEyMTQsMjQgQEAKIAkJCQkJcGNpX25hbWUoZC0+cGRldiksICMjYXJnKQogI2lmbmRlZiBOVl9ERUJVR19OT1RSQUNFCiAjZGVmaW5lIE5WX0RFQlVHKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChkcm1fZGVidWcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgIiVzOiVkIC0gIiBmbXQsIF9fZnVuY19fLCAgICAgICAgICAgICBcCisJCQkgIF9fTElORV9fLCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTlZfREVCVUdfS01TKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9LTVMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCAiJXM6JWQgLSAiIGZtdCwgX19mdW5jX18sICAgICAgICAgICAgIFwKIAkJCSAgX19MSU5FX18sICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgTlZfREVCVUcoZCwgZm10LCBhcmcuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKGRybV9kZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCBmbXQsICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5WX0RFQlVHX0tNUyhkLCBmbXQsIGFyZy4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfS01TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgZm10LCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKaW5kZXggMzZlOGM1ZS4uODRhZjI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwpAQCAtNTgsNyArNTgsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKIAlpbnQgcmV0LCBpOwogCi0JaWYgKCFjaGFuLT5hY2NlbF9kb25lIHx8CisJaWYgKCFjaGFuIHx8ICFjaGFuLT5hY2NlbF9kb25lIHx8CiAJICAgIGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CiAJICAgIGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpCiAJCXJldHVybiAwOwpAQCAtMzE4LDE0ICszMTgsMTYgQEAKIAlwYXItPm5vdXZlYXVfZmIgPSBub3V2ZWF1X2ZiOwogCXBhci0+ZGV2ID0gZGV2OwogCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7Ci0JCWJyZWFrOwotCX07CisJaWYgKGRldl9wcml2LT5jaGFubmVsKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgeworCQljYXNlIE5WXzUwOgorCQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlicmVhazsKKwkJfTsKKwl9CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsKGRldik7CiAKQEAgLTM0Nyw3ICszNDksNyBAQAogaW50CiBub3V2ZWF1X2ZiY29uX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsIDMyLCBub3V2ZWF1X2ZiY29uX2NyZWF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5ZjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorCitzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKKwl1aW50MzJfdCBzaWduYXR1cmU7CisJdWludDhfdCAgdmVyc2lvbjsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDMyX3QgZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBub3V2ZWF1X2N0eHZhbHMgeworCXVpbnQzMl90IHNpZ25hdHVyZTsKKwl1aW50OF90ICB2ZXJzaW9uOworCXVpbnQzMl90IGxlbmd0aDsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IHZhbHVlOworCX0gZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludAorbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQsIGk7CisKKwlpZiAocGdyYXBoLT5hY2NlbF9ibG9ja2VkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKKwkJaWYgKGxlMzJfdG9fY3B1KGNwLT5zaWduYXR1cmUpICE9IDB4NTA0MzU2NGUgfHwKKwkJICAgIGNwLT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKKwkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKKwkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWNwID0gcGdyYXBoLT5jdHhwcm9nOworCisJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKKwkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbm91dmVhdV9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKworCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKKwkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKKwkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKKwl9CisKKwlpZiAocGdyYXBoLT5jdHh2YWxzKSB7CisJCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7CisJCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7CisJfQorfQorCit2b2lkCitub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOworCWludCBpOworCisJaWYgKCFjdikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpOyBpKyspCisJCW52X3dvMzIoZGV2LCBjdHgsIGxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLm9mZnNldCksCisJCQlsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS52YWx1ZSkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzljNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19OT1VWRUFVX0dSQ1RYX0hfXworI2RlZmluZSBfX05PVVZFQVVfR1JDVFhfSF9fCisKK3N0cnVjdCBub3V2ZWF1X2dyY3R4IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJZW51bSB7CisJCU5PVVZFQVVfR1JDVFhfUFJPRywKKwkJTk9VVkVBVV9HUkNUWF9WQUxTCisJfSBtb2RlOworCXZvaWQgKmRhdGE7CisKKwl1aW50MzJfdCBjdHhwcm9nX21heDsKKwl1aW50MzJfdCBjdHhwcm9nX2xlbjsKKwl1aW50MzJfdCBjdHhwcm9nX3JlZzsKKwlpbnQgICAgICBjdHhwcm9nX2xhYmVsWzMyXTsKKwl1aW50MzJfdCBjdHh2YWxzX3BvczsKKwl1aW50MzJfdCBjdHh2YWxzX2Jhc2U7Cit9OworCisjaWZkZWYgQ1BfQ1RYCitzdGF0aWMgaW5saW5lIHZvaWQKK2NwX291dChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1aW50MzJfdCBpbnN0KQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCUJVR19PTihjdHgtPmN0eHByb2dfbGVuID09IGN0eC0+Y3R4cHJvZ19tYXgpOworCWN0eHByb2dbY3R4LT5jdHhwcm9nX2xlbisrXSA9IGluc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfbHNyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIHVpbnQzMl90IHZhbCkKK3sKKwljcF9vdXQoY3R4LCBDUF9MT0FEX1NSIHwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9jdHgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBsZW5ndGgpCit7CisJY3R4LT5jdHhwcm9nX3JlZyA9IChyZWcgLSAweDAwNDAwMDAwKSA+PiAyOworCisJY3R4LT5jdHh2YWxzX2Jhc2UgPSBjdHgtPmN0eHZhbHNfcG9zOworCWN0eC0+Y3R4dmFsc19wb3MgPSBjdHgtPmN0eHZhbHNfYmFzZSArIGxlbmd0aDsKKworCWlmIChsZW5ndGggPiAoQ1BfQ1RYX0NPVU5UID4+IENQX0NUWF9DT1VOVF9TSElGVCkpIHsKKwkJY3BfbHNyKGN0eCwgbGVuZ3RoKTsKKwkJbGVuZ3RoID0gMDsKKwl9CisKKwljcF9vdXQoY3R4LCBDUF9DVFggfCAobGVuZ3RoIDw8IENQX0NUWF9DT1VOVF9TSElGVCkgfCBjdHgtPmN0eHByb2dfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9uYW1lKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBuYW1lKQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCWludCBpOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCWN0eC0+Y3R4cHJvZ19sYWJlbFtuYW1lXSA9IGN0eC0+Y3R4cHJvZ19sZW47CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y3R4cHJvZ19sZW47IGkrKykgeworCQlpZiAoKGN0eHByb2dbaV0gJiAweGZmZjAwMDAwKSAhPSAweGZmNDAwMDAwKQorCQkJY29udGludWU7CisJCWlmICgoY3R4cHJvZ1tpXSAmIENQX0JSQV9JUCkgIT0gKChuYW1lKSA8PCBDUF9CUkFfSVBfU0hJRlQpKQorCQkJY29udGludWU7CisJCWN0eHByb2dbaV0gPSAoY3R4cHJvZ1tpXSAmIDB4MDBmZjAwZmYpIHwKKwkJCSAgICAgKGN0eC0+Y3R4cHJvZ19sZW4gPDwgQ1BfQlJBX0lQX1NISUZUKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX2JyYShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1MzIgbW9kLCBpbnQgZmxhZywgaW50IHN0YXRlLCBpbnQgbmFtZSkKK3sKKwlpbnQgaXAgPSAwOworCisJaWYgKG1vZCAhPSAyKSB7CisJCWlwID0gY3R4LT5jdHhwcm9nX2xhYmVsW25hbWVdIDw8IENQX0JSQV9JUF9TSElGVDsKKwkJaWYgKGlwID09IDApCisJCQlpcCA9IDB4ZmYwMDAwMDAgfCAobmFtZSA8PCBDUF9CUkFfSVBfU0hJRlQpOworCX0KKworCWNwX291dChjdHgsIENQX0JSQSB8IChtb2QgPDwgMTgpIHwgaXAgfCBmbGFnIHwKKwkJICAgIChzdGF0ZSA/IDAgOiBDUF9CUkFfSUZfQ0xFQVIpKTsKK30KKyNkZWZpbmUgY3BfYnJhKGMsZixzLG4pIF9jcF9icmEoKGMpLCAwLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MsIG4pCisjaWZkZWYgQ1BfQlJBX01PRAorI2RlZmluZSBjcF9jYWwoYyxmLHMsbikgX2NwX2JyYSgoYyksIDEsIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcywgbikKKyNkZWZpbmUgY3BfcmV0KGMsZixzKSBfY3BfYnJhKChjKSwgMiwgQ1BfRkxBR18jI2YsIENQX0ZMQUdfIyNmIyNfIyNzLCAwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX3dhaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IGZsYWcsIGludCBzdGF0ZSkKK3sKKwljcF9vdXQoY3R4LCBDUF9XQUlUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1dBSVRfU0VUIDogMCkpOworfQorI2RlZmluZSBjcF93YWl0KGMsZixzKSBfY3Bfd2FpdCgoYyksIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcykKKworc3RhdGljIGlubGluZSB2b2lkCitfY3Bfc2V0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBmbGFnLCBpbnQgc3RhdGUpCit7CisJY3Bfb3V0KGN0eCwgQ1BfU0VUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1NFVF8xIDogMCkpOworfQorI2RlZmluZSBjcF9zZXQoYyxmLHMpIF9jcF9zZXQoKGMpLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfcG9zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBvZmZzZXQpCit7CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IGN0eC0+Y3R4dmFsc19wb3M7CisKKwljcF9sc3IoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwljcF9vdXQoY3R4LCBDUF9TRVRfQ09OVEVYVF9QT0lOVEVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitncl9kZWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1ZBTFMpCisJCXJldHVybjsKKworCXJlZyA9IChyZWcgLSAweDAwNDAwMDAwKSAvIDQ7CisJcmVnID0gKHJlZyAtIGN0eC0+Y3R4cHJvZ19yZWcpICsgY3R4LT5jdHh2YWxzX2Jhc2U7CisKKwludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIHJlZywgdmFsKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYwppbmRleCBhMmMzMGY0Li40NzViYTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pb2MzMi5jCkBAIC02MSwxMiArNjEsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG5vdXZlYXVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogI2VuZGlmCi0JbG9ja19rZXJuZWwoKTsJICAvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDJlZDQxZDMuLmU3NmVjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTI5OSw5NCArMjk5LDEzIEBACiAJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwogfQogCi1pbnQKLW5vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50Citub3V2ZWF1X2NhcmRfaW5pdF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iajsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAicHJldiBzdGF0ZSA9ICVkXG4iLCBkZXZfcHJpdi0+aW5pdF9zdGF0ZSk7Ci0KLQlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgPT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkKLQkJcmV0dXJuIDA7Ci0KLQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKLQotCS8qIEluaXRpYWxpc2UgaW50ZXJuYWwgZHJpdmVyIEFQSSBob29rcyAqLwotCXJldCA9IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7Ci0JZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9GQUlMRUQ7Ci0KLQkvKiBQYXJzZSBCSU9TIHRhYmxlcyAvIFJ1biBpbml0IHRhYmxlcyBpZiBjYXJkIG5vdCBQT1NUZWQgKi8KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlyZXQgPSBub3V2ZWF1X2Jpb3NfaW5pdChkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9lYXJseV9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIEluaXRpYWxpc2UgaW5zdGFuY2UgbWVtb3J5LCBtdXN0IGhhcHBlbiBiZWZvcmUgbWVtX2luaXQgc28gd2UKLQkgKiBrbm93IGV4YWN0bHkgaG93IG11Y2ggVlJBTSB3ZSdyZSBhYmxlIHRvIHVzZSBmb3IgIm5vcm1hbCIKLQkgKiBwdXJwb3Nlcy4KLQkgKi8KLQlyZXQgPSBlbmdpbmUtPmluc3RtZW0uaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTZXR1cCB0aGUgbWVtb3J5IG1hbmFnZXIgKi8KLQlyZXQgPSBub3V2ZWF1X21lbV9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUE1DICovCi0JcmV0ID0gZW5naW5lLT5tYy5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBUSU1FUiAqLwotCXJldCA9IGVuZ2luZS0+dGltZXIuaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQRkIgKi8KLQlyZXQgPSBlbmdpbmUtPmZiLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUEdSQVBIICovCi0JcmV0ID0gZW5naW5lLT5ncmFwaC5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBGSUZPICovCi0JcmV0ID0gZW5naW5lLT5maWZvLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKLQkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbAotCSAqLwotCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogd2hhdCBhYm91dCBQVklERU8vUENSVEMvUFJBTURBQyBldGM/ICovCi0KIAlyZXQgPSBub3V2ZWF1X2NoYW5uZWxfYWxsb2MoZGV2LCAmZGV2X3ByaXYtPmNoYW5uZWwsCiAJCQkJICAgIChzdHJ1Y3QgZHJtX2ZpbGUgKiktMiwKIAkJCQkgICAgTnZEbWFGQiwgTnZEbWFUVCk7CkBAIC0zOTksMzkgKzMxOCwxMzMgQEAKIAkJCQkgICAgIE5WX0RNQV9BQ0NFU1NfUlcsIE5WX0RNQV9UQVJHRVRfVklETUVNLAogCQkJCSAgICAgJmdwdW9iaik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfZXJyOwogCiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfcmVmX2FkZChkZXYsIGRldl9wcml2LT5jaGFubmVsLCBOdkRtYVZSQU0sCiAJCQkJICAgICBncHVvYmosIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJbm91dmVhdV9ncHVvYmpfZGVsKGRldiwgJmdwdW9iaik7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChyZXQpCisJCWdvdG8gb3V0X2VycjsKIAogCWdwdW9iaiA9IE5VTEw7CiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ2FydF9kbWFfbmV3KGRldl9wcml2LT5jaGFubmVsLCAwLAogCQkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplLAogCQkJCQkgIE5WX0RNQV9BQ0NFU1NfUlcsICZncHVvYmosIE5VTEwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2VycjsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBkZXZfcHJpdi0+Y2hhbm5lbCwgTnZEbWFHQVJULAogCQkJCSAgICAgZ3B1b2JqLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZncHVvYmopOwotCQlyZXR1cm4gcmV0OworCWlmIChyZXQpCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiAwOworb3V0X2VycjoKKwlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKKwlub3V2ZWF1X2NoYW5uZWxfZnJlZShkZXZfcHJpdi0+Y2hhbm5lbCk7CisJZGV2X3ByaXYtPmNoYW5uZWwgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK2ludAorbm91dmVhdV9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lOworCWludCByZXQ7CisKKwlOVl9ERUJVRyhkZXYsICJwcmV2IHN0YXRlID0gJWRcbiIsIGRldl9wcml2LT5pbml0X3N0YXRlKTsKKworCWlmIChkZXZfcHJpdi0+aW5pdF9zdGF0ZSA9PSBOT1VWRUFVX0NBUkRfSU5JVF9ET05FKQorCQlyZXR1cm4gMDsKKworCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBkZXYsIE5VTEwsIG5vdXZlYXVfdmdhX3NldF9kZWNvZGUpOworCisJLyogSW5pdGlhbGlzZSBpbnRlcm5hbCBkcml2ZXIgQVBJIGhvb2tzICovCisJcmV0ID0gbm91dmVhdV9pbml0X2VuZ2luZV9wdHJzKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CisJZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9GQUlMRUQ7CisKKwkvKiBQYXJzZSBCSU9TIHRhYmxlcyAvIFJ1biBpbml0IHRhYmxlcyBpZiBjYXJkIG5vdCBQT1NUZWQgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBub3V2ZWF1X2Jpb3NfaW5pdChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZWFybHlfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Jpb3M7CisKKwkvKiBJbml0aWFsaXNlIGluc3RhbmNlIG1lbW9yeSwgbXVzdCBoYXBwZW4gYmVmb3JlIG1lbV9pbml0IHNvIHdlCisJICoga25vdyBleGFjdGx5IGhvdyBtdWNoIFZSQU0gd2UncmUgYWJsZSB0byB1c2UgZm9yICJub3JtYWwiCisJICogcHVycG9zZXMuCisJICovCisJcmV0ID0gZW5naW5lLT5pbnN0bWVtLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9ncHVvYmpfZWFybHk7CisKKwkvKiBTZXR1cCB0aGUgbWVtb3J5IG1hbmFnZXIgKi8KKwlyZXQgPSBub3V2ZWF1X21lbV9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaW5zdG1lbTsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9tZW07CisKKwkvKiBQTUMgKi8KKwlyZXQgPSBlbmdpbmUtPm1jLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9ncHVvYmo7CisKKwkvKiBQVElNRVIgKi8KKwlyZXQgPSBlbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9tYzsKKworCS8qIFBGQiAqLworCXJldCA9IGVuZ2luZS0+ZmIuaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RpbWVyOworCisJLyogUEdSQVBIICovCisJcmV0ID0gZW5naW5lLT5ncmFwaC5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZmI7CisKKwkvKiBQRklGTyAqLworCXJldCA9IGVuZ2luZS0+Zmlmby5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3JhcGg7CisKKwkvKiB0aGlzIGNhbGwgaXJxX3ByZWluc3RhbGwsIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFuZAorCSAqIGNhbGwgaXJxX3Bvc3RpbnN0YWxsCisJICovCisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZmlmbzsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lycTsKKworCS8qIHdoYXQgYWJvdXQgUFZJREVPL1BDUlRDL1BSQU1EQUMgZXRjPyAqLworCisJaWYgKCFlbmdpbmUtPmdyYXBoLmFjY2VsX2Jsb2NrZWQpIHsKKwkJcmV0ID0gbm91dmVhdV9jYXJkX2luaXRfY2hhbm5lbChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfaXJxOwogCX0KIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQogCQkJcmV0ID0gbnY1MF9kaXNwbGF5X2NyZWF0ZShkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlyZXQgPSBudjA0X2Rpc3BsYXlfY3JlYXRlKGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlyZXQgPSBub3V2ZWF1X2JhY2tsaWdodF9pbml0KGRldik7CkBAIC00NDQsNiArNDU3LDMyIEBACiAJCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2KTsKIAogCXJldHVybiAwOworCitvdXRfaXJxOgorCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CitvdXRfZmlmbzoKKwllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKK291dF9ncmFwaDoKKwllbmdpbmUtPmdyYXBoLnRha2Vkb3duKGRldik7CitvdXRfZmI6CisJZW5naW5lLT5mYi50YWtlZG93bihkZXYpOworb3V0X3RpbWVyOgorCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKK291dF9tYzoKKwllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CitvdXRfZ3B1b2JqOgorCW5vdXZlYXVfZ3B1b2JqX3Rha2Vkb3duKGRldik7CitvdXRfbWVtOgorCW5vdXZlYXVfbWVtX2Nsb3NlKGRldik7CitvdXRfaW5zdG1lbToKKwllbmdpbmUtPmluc3RtZW0udGFrZWRvd24oZGV2KTsKK291dF9ncHVvYmpfZWFybHk6CisJbm91dmVhdV9ncHVvYmpfbGF0ZV90YWtlZG93bihkZXYpOworb3V0X2Jpb3M6CisJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7CitvdXQ6CisJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdXZlYXVfY2FyZF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwppbmRleCBiOTEzNjM2Li5kMmYxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwpAQCAtMTQzLDEwICsxNDMsMTAgQEAKIAlzdGF0ZS0+cGxsc2VsIHw9IG52X2NydGMtPmluZGV4ID8gUExMU0VMX1ZQTEwyX01BU0sgOiBQTExTRUxfVlBMTDFfTUFTSzsKIAogCWlmIChwdi0+Tk0yKQotCQlOVl9UUkFDRShkZXYsICJ2cGxsOiBuMSAlZCBuMiAlZCBtMSAlZCBtMiAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4xICVkIG4yICVkIG0xICVkIG0yICVkIGxvZzJwICVkXG4iLAogCQkJIHB2LT5OMSwgcHYtPk4yLCBwdi0+TTEsIHB2LT5NMiwgcHYtPmxvZzJQKTsKIAllbHNlCi0JCU5WX1RSQUNFKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKIAkJCSBwdi0+TjEsIHB2LT5NMSwgcHYtPmxvZzJQKTsKIAogCW52X2NydGMtPmN1cnNvci5zZXRfb2Zmc2V0KG52X2NydGMsIG52X2NydGMtPmN1cnNvci5vZmZzZXQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJdW5zaWduZWQgY2hhciBzZXExID0gMCwgY3J0YzE3ID0gMDsKIAl1bnNpZ25lZCBjaGFyIGNydGMxQTsKIAotCU5WX1RSQUNFKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCisJTlZfREVCVUdfS01TKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCiAJCQkJCQkJbnZfY3J0Yy0+aW5kZXgpOwogCiAJaWYgKG52X2NydGMtPmxhc3RfZHBtcyA9PSBtb2RlKSAvKiBEb24ndCBkbyB1bm5lY2VzYXJ5IG1vZGUgY2hhbmdlcy4gKi8KQEAgLTYwMyw3ICs2MDMsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCU5WX0RFQlVHKGRldiwgIkNUUkMgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJDVFJDIG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKIAlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkanVzdGVkX21vZGUpOwogCiAJLyogdW5sb2NrIG11c3QgY29tZSBhZnRlciB0dXJuaW5nIG9mZiBGUF9UR19DT05UUk9MIGluIG91dHB1dF9wcmVwYXJlICovCkBAIC03MDMsNyArNzAzLDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpudl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOwogCi0JTlZfREVCVUcoY3J0Yy0+ZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoY3J0Yy0+ZGV2LCAiXG4iKTsKIAogCWlmICghbnZfY3J0YykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggYTVmYTUxNy4uZDlmMzI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlOVldyaXRlVmdhU2VxKGRldiwgMCwgTlZfVklPX1NSX0NMT0NLX0lOREVYLCBzYXZlZF9zZXExKTsKIAogCWlmIChibHVlID09IDB4MTgpIHsKLQkJTlZfVFJBQ0UoZGV2LCAiTG9hZCBkZXRlY3RlZCBvbiBoZWFkIEFcbiIpOworCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gaGVhZCBBXG4iKTsKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCX0KIApAQCAtMzUwLDE0ICszNTAsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0Jc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7Ci0KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqcmViaW5kOwogCQl1aW50MzJfdCBkYWNfb2Zmc2V0ID0gbnYwNF9kYWNfb3V0cHV0X29mZnNldChlbmNvZGVyKTsKQEAgLTQ2Niw3ICs0NjIsNyBAQAogewogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZShudl9lbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IGU1YjMzMzMuLjQ4M2Y4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm91dHB1dF9tb2RlID0gJm52X2VuY29kZXItPm1vZGU7CiAJdWludDMyX3QgbW9kZV9yYXRpbywgcGFuZWxfcmF0aW87CiAKLQlOVl9ERUJVRyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUob3V0cHV0X21vZGUpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRlAgcmVnaXN0ZXJzIGluIHRoaXMgQ1JUQy4gKi8KQEAgLTQxMyw3ICs0MTMsOSBAQAogCXN0cnVjdCBkY2JfZW50cnkgKmRjYmUgPSBudl9lbmNvZGVyLT5kY2I7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7CisJTlZfSU5GTyhkZXYsICJPdXRwdXQgJXMgaXMgcnVubmluZyBvbiBDUlRDICVkIHVzaW5nIG91dHB1dCAlY1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZSgmbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPmJhc2UpLAorCQludl9jcnRjLT5pbmRleCwgJ0AnICsgZmZzKG52X2VuY29kZXItPmRjYi0+b3IpKTsKIAogCWlmIChkY2JlLT50eXBlID09IE9VVFBVVF9UTURTKQogCQlydW5fdG1kc190YWJsZShkZXYsIGRjYmUsIGhlYWQsIG52X2VuY29kZXItPm1vZGUuY2xvY2spOwpAQCAtNTUwLDcgKzU1Miw3IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwppbmRleCBiNDdjNzU3Li5lZjc3MjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwpAQCAtOTksMTAgKzk5LDExIEBACiAJdWludDE2X3QgY29ubmVjdG9yWzE2XSA9IHsgMCB9OwogCWludCBpLCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKG52X3R3b19oZWFkcyhkZXYpKQogCQludjA0X2Rpc3BsYXlfc3RvcmVfaW5pdGlhbF9oZWFkX293bmVyKGRldik7CisJbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDEpOwogCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKIAlkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KGRldik7CkBAIC0yMDMsOCArMjA0LDYgQEAKIAkvKiBTYXZlIHByZXZpb3VzIHN0YXRlICovCiAJTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7CiAKLQlub3V2ZWF1X2h3X3NhdmVfdmdhX2ZvbnRzKGRldiwgMSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKIAkJY3J0Yy0+ZnVuY3MtPnNhdmUoY3J0Yyk7CiAKQEAgLTIyMyw3ICsyMjIsNyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJLyogVHVybiBldmVyeSBDUlRDIG9mZi4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewpAQCAtMjQ2LDkgKzI0NSw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5yZXN0b3JlKGNydGMpOwogCi0Jbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDApOwotCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKKworCW5vdXZlYXVfaHdfc2F2ZV92Z2FfZm9udHMoZGV2LCAwKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCmluZGV4IDM5NmVlOTIuLmQ1NjFkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAJbnZfd2kzMihkZXYsIGluc3RhbmNlLCB0bXApOwogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfU1dJVENIMSwgdG1wKTsKLQludl93cjMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX0NBQ0hFMSArIHN1YmMsIHRtcCk7CisJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9DQUNIRTEgKyAoc3ViYzw8MiksIHRtcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYwppbmRleCA2YmY2ODA0Li42ODcwZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jCkBAIC0zODksNDkgKzM4OSw1MCBAQAogCWludCBudjEwW0FSUkFZX1NJWkUobnYxMF9ncmFwaF9jdHhfcmVncyldOwogCWludCBudjE3W0FSUkFZX1NJWkUobnYxN19ncmFwaF9jdHhfcmVncyldOwogCXN0cnVjdCBwaXBlX3N0YXRlIHBpcGVfc3RhdGU7CisJdWludDMyX3QgbG1hX3dpbmRvd1s0XTsKIH07CiAKKyNkZWZpbmUgUElQRV9TQVZFKGRldiwgc3RhdGUsIGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgX19pOwkJCQkJCVwKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7CQlcCisJCWZvciAoX19pID0gMDsgX19pIDwgQVJSQVlfU0laRShzdGF0ZSk7IF9faSsrKQkJXAorCQkJc3RhdGVbX19pXSA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBQSVBFX1JFU1RPUkUoZGV2LCBzdGF0ZSwgYWRkcikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBfX2k7CQkJCQkJXAorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCBhZGRyKTsJCVwKKwkJZm9yIChfX2kgPSAwOyBfX2kgPCBBUlJBWV9TSVpFKHN0YXRlKTsgX19pKyspCQlcCisJCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCBzdGF0ZVtfX2ldKTsgXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIG52MTBfZ3JhcGhfc2F2ZV9waXBlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKnBncmFwaF9jdHggPSBjaGFuLT5wZ3JhcGhfY3R4OwotCXN0cnVjdCBwaXBlX3N0YXRlICpmaWZvX3BpcGVfc3RhdGUgPSAmcGdyYXBoX2N0eC0+cGlwZV9zdGF0ZTsKLQlpbnQgaTsKLSNkZWZpbmUgUElQRV9TQVZFKGFkZHIpIFwKLQlkbyB7IFwKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7IFwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcik7IGkrKykgXAotCQkJZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcltpXSA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEpOyBcCi0JfSB3aGlsZSAoMCkKKwlzdHJ1Y3QgcGlwZV9zdGF0ZSAqcGlwZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwogCi0JUElQRV9TQVZFKDB4NDQwMCk7Ci0JUElQRV9TQVZFKDB4MDIwMCk7Ci0JUElQRV9TQVZFKDB4NjQwMCk7Ci0JUElQRV9TQVZFKDB4NjgwMCk7Ci0JUElQRV9TQVZFKDB4NmMwMCk7Ci0JUElQRV9TQVZFKDB4NzAwMCk7Ci0JUElQRV9TQVZFKDB4NzQwMCk7Ci0JUElQRV9TQVZFKDB4NzgwMCk7Ci0JUElQRV9TQVZFKDB4MDA0MCk7Ci0JUElQRV9TQVZFKDB4MDAwMCk7Ci0KLSN1bmRlZiBQSVBFX1NBVkUKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NjQwMCwgMHg2NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NjgwMCwgMHg2ODAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NmMwMCwgMHg2YzAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzAwMCwgMHg3MDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzQwMCwgMHg3NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzgwMCwgMHg3ODAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDA0MCwgMHgwMDQwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDAwMCwgMHgwMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgbnYxMF9ncmFwaF9sb2FkX3BpcGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBncmFwaF9zdGF0ZSAqcGdyYXBoX2N0eCA9IGNoYW4tPnBncmFwaF9jdHg7Ci0Jc3RydWN0IHBpcGVfc3RhdGUgKmZpZm9fcGlwZV9zdGF0ZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwotCWludCBpOworCXN0cnVjdCBwaXBlX3N0YXRlICpwaXBlID0gJnBncmFwaF9jdHgtPnBpcGVfc3RhdGU7CiAJdWludDMyX3QgeGZtb2RlMCwgeGZtb2RlMTsKLSNkZWZpbmUgUElQRV9SRVNUT1JFKGFkZHIpIFwKLQlkbyB7IFwKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7IFwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcik7IGkrKykgXAotCQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcltpXSk7IFwKLQl9IHdoaWxlICgwKQotCisJaW50IGk7CiAKIAlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKIAkvKiBYWFggY2hlY2sgaGFpa3UgY29tbWVudHMgKi8KQEAgLTQ1NywyNCArNDU4LDIyIEBACiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwOCk7CiAKIAotCVBJUEVfUkVTVE9SRSgweDAyMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCiAJLyogcmVzdG9yZSBYRk1PREUgKi8KIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMCwgeGZtb2RlMCk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEsIHhmbW9kZTEpOwotCVBJUEVfUkVTVE9SRSgweDY0MDApOwotCVBJUEVfUkVTVE9SRSgweDY4MDApOwotCVBJUEVfUkVTVE9SRSgweDZjMDApOwotCVBJUEVfUkVTVE9SRSgweDcwMDApOwotCVBJUEVfUkVTVE9SRSgweDc0MDApOwotCVBJUEVfUkVTVE9SRSgweDc4MDApOwotCVBJUEVfUkVTVE9SRSgweDQ0MDApOwotCVBJUEVfUkVTVE9SRSgweDAwMDApOwotCVBJUEVfUkVTVE9SRSgweDAwNDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2NDAwLCAweDY0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2ODAwLCAweDY4MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2YzAwLCAweDZjMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3MDAwLCAweDcwMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3NDAwLCAweDc0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3ODAwLCAweDc4MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg0NDAwLCAweDQ0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMDAwLCAweDAwMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMDQwLCAweDAwNDApOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCi0jdW5kZWYgUElQRV9SRVNUT1JFCiB9CiAKIHN0YXRpYyB2b2lkIG52MTBfZ3JhcGhfY3JlYXRlX3BpcGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKQEAgLTgzMiw2ICs4MzEsOSBAQAogCQkJCSAgICAgICgxPDwzMSkpOwogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDE3KSB7CiAJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LCAweDFmMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwYTEwLCAweDNmZjNmYjYpOworCQludl93cjMyKGRldiwgMHg0MDA4MzgsIDB4MmY4Njg0KTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwODNjLCAweDExNWYzZik7CiAJCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLCAweDQwMDAwMDIwKTsKIAl9IGVsc2UKIAkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX0RFQlVHXzQsIDB4MDAwMDAwMDApOwpAQCAtODY3LDYgKzg2OSwxMTUgQEAKIHsKIH0KIAorc3RhdGljIGludAorbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3coc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCisJCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBncmFwaF9zdGF0ZSAqY3R4ID0gY2hhbi0+cGdyYXBoX2N0eDsKKwlzdHJ1Y3QgcGlwZV9zdGF0ZSAqcGlwZSA9ICZjdHgtPnBpcGVfc3RhdGU7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKwl1aW50MzJfdCBwaXBlXzB4MDA0MFsxXSwgcGlwZV8weDY0YzBbOF0sIHBpcGVfMHg2YTgwWzNdLCBwaXBlXzB4NmFiMFszXTsKKwl1aW50MzJfdCB4Zm1vZGUwLCB4Zm1vZGUxOworCWludCBpOworCisJY3R4LT5sbWFfd2luZG93WyhtdGhkIC0gMHgxNjM4KSAvIDRdID0gZGF0YTsKKworCWlmIChtdGhkICE9IDB4MTY0NCkKKwkJcmV0dXJuIDA7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCVBJUEVfU0FWRShkZXYsIHBpcGVfMHgwMDQwLCAweDAwNDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOworCisJUElQRV9SRVNUT1JFKGRldiwgY3R4LT5sbWFfd2luZG93LCAweDY3OTApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwl4Zm1vZGUwID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTApOworCXhmbW9kZTEgPSBudl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSk7CisKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NjRjMCwgMHg2NGMwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NmFiMCwgMHg2YWIwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NmE4MCwgMHg2YTgwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTAsIDB4MTAwMDAwMDApOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUxLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDA2NGMwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDNmODAwMDAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDZhYjApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4M2Y4MDAwMDApOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwNmE4MCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDAwMDQwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDA4KTsKKworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4MDA0MCwgMHgwMDQwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwLCB4Zm1vZGUwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSwgeGZtb2RlMSk7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NjRjMCwgMHg2NGMwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NmFiMCwgMHg2YWIwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NmE4MCwgMHg2YTgwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDAwYzApOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4MDAwMDAwMDApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCisJCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LAorCQludl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfREVCVUdfNCkgfCAweDEgPDwgOCk7CisJbnZfd3IzMihkZXYsIDB4MDA0MDA2YjAsCisJCW52X3JkMzIoZGV2LCAweDAwNDAwNmIwKSB8IDB4OCA8PCAyNCk7CisKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MTdfZ3JhcGhfY2Vsc2l1c19tdGhkc1tdID0geworCXsgMHgxNjM4LCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjNjLCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjQwLCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjQ0LCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjU4LCBudjE3X2dyYXBoX210aGRfbG1hX2VuYWJsZSB9LAorCXt9Cit9OworCiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MTBfZ3JhcGhfZ3JjbGFzc1tdID0gewogCXsgMHgwMDMwLCBmYWxzZSwgTlVMTCB9LCAvKiBudWxsICovCiAJeyAweDAwMzksIGZhbHNlLCBOVUxMIH0sIC8qIG0ybWYgKi8KQEAgLTg4Nyw2ICs5OTgsNiBAQAogCXsgMHgwMDk1LCBmYWxzZSwgTlVMTCB9LCAvKiBtdWx0aXRleF90cmkgKi8KIAl7IDB4MDA1NiwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxMCkgKi8KIAl7IDB4MDA5NiwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxMSkgKi8KLQl7IDB4MDA5OSwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxNykgKi8KKwl7IDB4MDA5OSwgZmFsc2UsIG52MTdfZ3JhcGhfY2Vsc2l1c19tdGhkcyB9LCAvKiBjZWxjaXVzIChudjE3KSAqLwogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCmluZGV4IDQ2Y2ZkOWMuLjgxYzAxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCQlyZXR1cm47CiAJbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5sYXN0X2RwbXMgPSBtb2RlOwogCi0JTlZfVFJBQ0UoZGV2LCAiU2V0dGluZyBkcG1zIG1vZGUgJWQgb24gVFYgZW5jb2RlciAob3V0cHV0ICVkKVxuIiwKKwlOVl9JTkZPKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIFRWIGVuY29kZXIgKG91dHB1dCAlZClcbiIsCiAJCSBtb2RlLCBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRjYi0+aW5kZXgpOwogCiAJcmVncy0+cHR2XzIwMCAmPSB+MTsKQEAgLTYxOSw3ICs2MTksNyBAQAogewogCXN0cnVjdCBudjE3X3R2X2VuY29kZXIgKnR2X2VuYyA9IHRvX3R2X2VuYyhlbmNvZGVyKTsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKHR2X2VuYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggN2U4NTQ3Yy4uMmIzMzJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjQsMzYgKzI0LDEwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCi0KLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHZhbHMiKTsKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgogbnY0MF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC04MywyNyArNTcsMzAgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjdHg7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJaW50IHJldDsKIAotCS8qIEFsbG9jYXRlIGEgMTc1S2lCIGJsb2NrIG9mIFBSQU1JTiB0byBzdG9yZSB0aGUgY29udGV4dC4gIFRoaXMKLQkgKiBpcyBtYXNzaXZlIG92ZXJraWxsIGZvciBhIGxvdCBvZiBjaGlwc2V0cywgYnV0IGl0IHNob3VsZCBiZSBzYWZlCi0JICogdW50aWwgd2UncmUgYWJsZSB0byBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseSAod2lsbCBoYXBwZW4gYXQgbW9yZQotCSAqIG9yIGxlc3MgdGhlIHNhbWUgdGltZSB3ZSdyZSBhYmxlIHRvIHdyaXRlIG91ciBvd24gY29udGV4dCBwcm9ncmFtcy4KLQkgKi8KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgY2hhbiwgTlVMTCwgMCwgMTc1KjEwMjQsIDE2LAotCQkJCQkgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkJICAmY2hhbi0+cmFtaW5fZ3JjdHgpOworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwZ3JhcGgtPmdyY3R4X3NpemUsCisJCQkJICAgICAxNiwgTlZPQkpfRkxBR19aRVJPX0FMTE9DLAorCQkJCSAgICAgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWN0eCA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CiAKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgY29udGV4dCB2YWx1ZXMgKi8KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQludjQwX2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7Ci0JbnZfd28zMihkZXYsIGN0eCwgMCwgY3R4LT5pbV9wcmFtaW4tPnN0YXJ0KTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OwogCisJCWN0eC5kZXYgPSBjaGFuLT5kZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCQljdHguZGF0YSA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwl9IGVsc2UgeworCQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmopOworCX0KKwludl93bzMyKGRldiwgY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iaiwgMCwKKwkJICAgICBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQsMTM5ICsxODEsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBub3V2ZWF1X2N0eHByb2cgewotCXVpbnQzMl90IHNpZ25hdHVyZTsKLQl1aW50OF90ICB2ZXJzaW9uOwotCXVpbnQxNl90IGxlbmd0aDsKLQl1aW50MzJfdCBkYXRhW107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IG5vdXZlYXVfY3R4dmFscyB7Ci0JdWludDMyX3Qgc2lnbmF0dXJlOwotCXVpbnQ4X3QgIHZlcnNpb247Ci0JdWludDMyX3QgbGVuZ3RoOwotCXN0cnVjdCB7Ci0JCXVpbnQzMl90IG9mZnNldDsKLQkJdWludDMyX3QgdmFsdWU7Ci0JfSBkYXRhW107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotaW50Ci1udjQwX2dyY3R4X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKLQljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKLQljaGFyIG5hbWVbMzJdOwotCWludCByZXQsIGk7Ci0KLQlwZ3JhcGgtPmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwotCi0JaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJc3ByaW50ZihuYW1lLCAibm91dmVhdS9udiUwMnguY3R4cHJvZyIsIGNoaXBzZXQpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAiTm8gY3R4cHJvZyBmb3IgTlYlMDJ4XG4iLCBjaGlwc2V0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlwZ3JhcGgtPmN0eHByb2cgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQltZW1jcHkocGdyYXBoLT5jdHhwcm9nLCBmdy0+ZGF0YSwgZnctPnNpemUpOwotCi0JCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCQlpZiAobGUzMl90b19jcHUoY3AtPnNpZ25hdHVyZSkgIT0gMHg1MDQzNTY0ZSB8fAotCQkgICAgY3AtPnZlcnNpb24gIT0gMCB8fAotCQkgICAgbGUxNl90b19jcHUoY3AtPmxlbmd0aCkgIT0gKChmdy0+c2l6ZSAtIDcpIC8gNCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgImN0eHByb2cgaW52YWxpZFxuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JfQotCi0JaWYgKCFwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJc3ByaW50ZihuYW1lLCAibm91dmVhdS9udiUwMnguY3R4dmFscyIsIGNoaXBzZXQpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAiTm8gY3R4dmFscyBmb3IgTlYlMDJ4XG4iLCBjaGlwc2V0KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXBncmFwaC0+Y3R4dmFscyA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQkJTlZfRVJST1IoZGV2LCAiT09NIGNvcHlpbmcgY3R4cHJvZ1xuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbWVtY3B5KHBncmFwaC0+Y3R4dmFscywgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQotCQljdiA9ICh2b2lkICopcGdyYXBoLT5jdHh2YWxzOwotCQlpZiAobGUzMl90b19jcHUoY3YtPnNpZ25hdHVyZSkgIT0gMHg1NjQzNTY0ZSB8fAotCQkgICAgY3YtPnZlcnNpb24gIT0gMCB8fAotCQkgICAgbGUzMl90b19jcHUoY3YtPmxlbmd0aCkgIT0gKChmdy0+c2l6ZSAtIDkpIC8gOCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgImN0eHZhbHMgaW52YWxpZFxuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JfQotCi0JY3AgPSBwZ3JhcGgtPmN0eHByb2c7Ci0KLQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoY3AtPmxlbmd0aCk7IGkrKykKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLAotCQkJbGUzMl90b19jcHUoY3AtPmRhdGFbaV0pKTsKLQotCXBncmFwaC0+YWNjZWxfYmxvY2tlZCA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi12b2lkCi1udjQwX2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCi0JaWYgKHBncmFwaC0+Y3R4cHJvZykgewotCQlrZnJlZShwZ3JhcGgtPmN0eHByb2cpOwotCQlwZ3JhcGgtPmN0eHByb2cgPSBOVUxMOwotCX0KLQotCWlmIChwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKLQkJcGdyYXBoLT5jdHh2YWxzID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQKLW52NDBfZ3JjdHhfdmFsc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqY3R4KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7Ci0Jc3RydWN0IG5vdXZlYXVfY3R4dmFscyAqY3YgPSBwZ3JhcGgtPmN0eHZhbHM7Ci0JaW50IGk7Ci0KLQlpZiAoIWN2KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUoY3YtPmxlbmd0aCk7IGkrKykKLQkJbnZfd28zMihkZXYsIGN0eCwgbGUzMl90b19jcHUoY3YtPmRhdGFbaV0ub2Zmc2V0KSwKLQkJCWxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLnZhbHVlKSk7Ci19Ci0KIC8qCiAgKiBHNzAJCTB4NDcKICAqIEc3MQkJMHg0OQpAQCAtMzU5LDcgKzIwMywyNiBAQAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlpZiAobm91dmVhdV9jdHhmdykgeworCQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSAxNzUgKiAxMDI0OworCX0KKworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OworCQl1aW50MzJfdCBjcFsyNTZdOworCisJCWN0eC5kZXYgPSBkZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCQljdHguZGF0YSA9IGNwOworCQljdHguY3R4cHJvZ19tYXggPSAyNTY7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5ncmN0eF9zaXplID0gY3R4LmN0eHZhbHNfcG9zICogNDsKKworCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IGN0eC5jdHhwcm9nX2xlbjsgaSsrKQorCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLCBjcFtpXSk7CisJfQogCiAJLyogTm8gY29udGV4dCBwcmVzZW50IGN1cnJlbnRseSAqLwogCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSLCAweDAwMDAwMDAwKTsKQEAgLTUzOSw2ICs0MDIsNyBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWIxMWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmN0eC5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKy8qIE5WSURJQSBjb250ZXh0IHByb2dyYW1zIGhhbmRsZSBhIG51bWJlciBvZiBvdGhlciBjb25kaXRpb25zIHdoaWNoIGFyZQorICogbm90IGltcGxlbWVudGVkIGluIG91ciB2ZXJzaW9ucy4gIEl0J3Mgbm90IGNsZWFyIHdoeSBOVklESUEgY29udGV4dAorICogcHJvZ3JhbXMgaGF2ZSB0aGlzIGNvZGUsIG5vciB3aGV0aGVyIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvcgorICogY29ycmVjdCBvcGVyYXRpb24uICBXZSdsbCBpbXBsZW1lbnQgYWRkaXRpb25hbCBoYW5kbGluZyBpZi93aGVuIHdlCisgKiBkaXNjb3ZlciBpdCdzIG5lY2Vzc2FyeS4KKyAqCisgKiAtIE9uIGNvbnRleHQgc2F2ZSwgTlZJRElBIHNldCAweDQwMDMxNCBiaXQgMCB0byAxIGlmIHRoZSAiM0Qgc3RhdGUiCisgKiAgIGZsYWcgaXMgc2V0LCB0aGlzIGdldHMgc2F2ZWQgaW50byB0aGUgY29udGV4dC4KKyAqIC0gT24gY29udGV4dCBzYXZlLCB0aGUgY29udGV4dCBwcm9ncmFtIGZvciBhbGwgY2FyZHMgbG9hZCBuc291cmNlCisgKiAgIGludG8gYSBmbGFnIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgSUxMRUdBTF9NVEhELiAgSWYgaXQncyBzZXQsCisgKiAgIG9wY29kZSAweDYwMDAwZCBpcyBjYWxsZWQgYmVmb3JlIHJlc3VtaW5nIG5vcm1hbCBvcGVyYXRpb24uCisgKiAtIFNvbWUgY29udGV4dCBwcm9ncmFtcyBjaGVjayBtb3JlIGNvbmRpdGlvbnMgdGhhbiB0aGUgYWJvdmUuICBOVjQ0CisgKiAgIGNoZWNrczogKChuc291cmNlICYgMHgwODU3KSB8fCAoMHg0MDA3MTggJiAweDAxMDApIHx8IChpbnRyICYgMHgwMDAxKSkKKyAqICAgYW5kIGNhbGxzIDB4NjAwMDBkIGJlZm9yZSByZXN1bWluZyBub3JtYWwgb3BlcmF0aW9uLgorICogLSBBdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgTlZJRElBJ3MgY29udGV4dCBwcm9ncmFtcywgZmxhZyA5IGlzIGNoZWNrZWQKKyAqICAgYW5kIGlmIHRydWUgMHg4MDAwMDEgaXMgY2FsbGVkIHdpdGggY291bnQ9MCwgcG9zPTAsIHRoZSBmbGFnIGlzIGNsZWFyZWQKKyAqICAgYW5kIHRoZW4gdGhlIGN0eHByb2cgaXMgYWJvcnRlZC4gIEl0IGxvb2tzIGxpa2UgYSBjb21wbGljYXRlZCBOT1AsCisgKiAgIGl0cyBwdXJwb3NlIGlzIHVua25vd24uCisgKiAtIEluIHRoZSBzZWN0aW9uIG9mIGNvZGUgdGhhdCBsb2FkcyB0aGUgcGVyLXZzIHN0YXRlLCBOVklESUEgY2hlY2sKKyAqICAgZmxhZyAxMC4gIElmIGl0J3Mgc2V0LCB0aGV5IG9ubHkgdHJhbnNmZXIgdGhlIHNtYWxsIDB4MzAwIGJ5dGUgYmxvY2sKKyAqICAgb2Ygc3RhdGUgKyB0aGUgc3RhdGUgZm9yIGEgc2luZ2xlIHZzIGFzIG9wcG9zZWQgdG8gdGhlIHN0YXRlIGZvcgorICogICBhbGwgdnMgdW5pdHMuICBJdCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRoYXQgaXQnbGwgb2NjdXIgaW4gbm9ybWFsCisgKiAgIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBzZWVpbmcgYXMgaXQgYXBwZWFycyBOVklESUEgbWF5IGhhdmUgc2NyZXdlZAorICogICB1cCB0aGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgYW5kIGhhdmUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbgorICogICByYXRoZXIgdGhhbiBhIGNwX2xzcihjdHgsIGR3b3Jkc19mb3JfMV92c191bml0KSBpbnN0cnVjdGlvbi4KKyAqIC0gVGhlcmUncyBhIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29udGV4dCBvZmZzZXQgMCAod2hlcmUgd2UgcGxhY2UKKyAqICAgdGhlIFBSQU1JTiBvZmZzZXQgb2YgdGhlIGNvbnRleHQpIGlzIGxvYWRlZCBpbnRvIGVpdGhlciAweDQwODAwMCwKKyAqICAgMHg0MDgwMDQgb3IgMHg0MDgwMDguICBOb3Qgc3VyZSB3aGF0J3MgdXAgdGhlcmUgZWl0aGVyLgorICogLSBUaGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgc2F2ZSAweDQwMGEwMCBhZ2FpbiBkdXJpbmcgdGhlIGNsZWFudXAKKyAqICAgcGF0aCBmb3IgYXV0by1sb2FkY3R4LgorICovCisKKyNkZWZpbmUgQ1BfRkxBR19DTEVBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1NFVCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT04gICAgICAgICgoMCAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT05fTE9BRCAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9TQVZFICAgMQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRSAgICAgICAgICAgICAoKDAgKiAzMikgKyA1KQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQUQgICAgICAgICAgICAgKCgwICogMzIpICsgNikKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0lETEUgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfQlVTWSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDMgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgzICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LNTQgICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVU5LNTRfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTks1NF9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDMgKiAzMikgKyA4KQorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19GQUxTRSAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfQUxXQVlTX1RSVUUgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTks1NyAgICAgICAgICAgICAgICAgKCgzICogMzIpICsgOSkKKyNkZWZpbmUgQ1BfRkxBR19VTks1N19DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzU3X1NFVCAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZmMwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMGEKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGUKKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19VTkswMSAgICAgIDB4MDA4MDAwMDEgLyogdW5rbm93biAqLworI2RlZmluZSBDUF9MT0FEX01BR0lDX05WNDRUQ0wgICAgMHgwMDgwMDAyOSAvKiBwZXItdnMgc3RhdGUgKDB4NDQ5NykgKi8KKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19OVjQwVENMICAgIDB4MDA4MDAwNDEgLyogcGVyLXZzIHN0YXRlICgweDQwOTcpICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCisKKy8qIFRPRE86CisgKiAgLSBnZXQgdnMgY291bnQgZnJvbSAweDE1NDAKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAgIC0gbnNvdXJjZSBoYW5kbGluZworICogICAgLSBSMCAmIDB4MDIwMCBoYW5kbGluZworICogICAgLSBzaW5nbGUtdnMgaGFuZGxpbmcKKyAqICAgIC0gNDAwMzE0IGJpdCAwCisgKi8KKworc3RhdGljIGludAorbnY0MF9ncmFwaF80MDk3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDYwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAhISgweDBiYWYgJiAoMSA8PCBkZXZfcHJpdi0+Y2hpcHNldCkpOworfQorCitzdGF0aWMgaW50CitudjQwX2dyYXBoX3ZzX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJcmV0dXJuIDg7CisJY2FzZSAweDQwOgorCQlyZXR1cm4gNjsKKwljYXNlIDB4NDE6CisJY2FzZSAweDQyOgorCQlyZXR1cm4gNTsKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ0OgorCWNhc2UgMHg0NjoKKwljYXNlIDB4NGE6CisJCXJldHVybiAzOworCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworCitlbnVtIGNwX2xhYmVsIHsKKwljcF9jaGVja19sb2FkID0gMSwKKwljcF9zZXR1cF9hdXRvX2xvYWQsCisJY3Bfc2V0dXBfbG9hZCwKKwljcF9zZXR1cF9zYXZlLAorCWNwX3N3YXBfc3RhdGUsCisJY3Bfc3dhcF9zdGF0ZTNkXzNfaXNfc2F2ZSwKKwljcF9wcmVwYXJlX2V4aXQsCisJY3BfZXhpdCwKK307CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9nZW5lcmFsKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJY3BfY3R4KGN0eCwgMHg0MDAwYTQsIDEpOworCWdyX2RlZihjdHgsIDB4NDAwMGE0LCAweDAwMDAwMDA4KTsKKwljcF9jdHgoY3R4LCAweDQwMDE0NCwgNTgpOworCWdyX2RlZihjdHgsIDB4NDAwMTQ0LCAweDAwMDAwMDAxKTsKKwljcF9jdHgoY3R4LCAweDQwMDMxNCwgMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDAzMTQsIDB4MDAwMDAwMDApOworCWNwX2N0eChjdHgsIDB4NDAwNDAwLCAxMCk7CisJY3BfY3R4KGN0eCwgMHg0MDA0ODAsIDEwKTsKKwljcF9jdHgoY3R4LCAweDQwMDUwMCwgMTkpOworCWdyX2RlZihjdHgsIDB4NDAwNTE0LCAweDAwMDQwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDUyNCwgMHg1NTU1NTU1NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA1MjgsIDB4NTU1NTU1NTUpOworCWdyX2RlZihjdHgsIDB4NDAwNTJjLCAweDU1NTU1NTU1KTsKKwlncl9kZWYoY3R4LCAweDQwMDUzMCwgMHg1NTU1NTU1NSk7CisJY3BfY3R4KGN0eCwgMHg0MDA1NjAsIDYpOworCWdyX2RlZihjdHgsIDB4NDAwNTY4LCAweDAwMDBmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMDU2YywgMHgwMDAwZmZmZik7CisJY3BfY3R4KGN0eCwgMHg0MDA1N2MsIDUpOworCWNwX2N0eChjdHgsIDB4NDAwNzEwLCAzKTsKKwlncl9kZWYoY3R4LCAweDQwMDcxMCwgMHgyMDAxMDAwMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA3MTQsIDB4MGY3M2VmMDApOworCWNwX2N0eChjdHgsIDB4NDAwNzI0LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwMDcyNCwgMHgwMjAwODgyMSk7CisJY3BfY3R4KGN0eCwgMHg0MDA3NzAsIDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAwODE0LCA0KTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4MjgsIDUpOworCQljcF9jdHgoY3R4LCAweDQwMDg0MCwgNSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODUwLCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NTgsIDQpOworCQlncl9kZWYoY3R4LCAweDQwMDg1OCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODVjLCAweDAwMDAwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NjQsIDB4ODAwMDAwMDApOworCQljcF9jdHgoY3R4LCAweDQwMDg2YywgOSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODZjLCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NzAsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDg3NCwgMHg4MDAwMDAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODc4LCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODgsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4YywgMHg4MDAwMDAwMCk7CisJCWNwX2N0eChjdHgsIDB4NDAwOWMwLCA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA5Y2MsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDlkYywgMHg4MDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NDAsIDIwKTsKKwkJaWYgKCFudjQwX2dyYXBoXzQwOTcoY3R4LT5kZXYpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCWdyX2RlZihjdHgsIDB4NDAwODYwICsgKGkgKiA0KSwgMHgwMDAwMDAwMSk7CisJCX0KKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODAsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4NCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODg4LCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4OTQsIDExKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4OTQsIDB4MDAwMDAwNDApOworCQlpZiAobnY0MF9ncmFwaF80MDk3KGN0eC0+ZGV2KSkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQlncl9kZWYoY3R4LCAweDQwMDhhMCArIChpICogNCksIDB4ODAwMDAwMDApOworCQl9CisJCWNwX2N0eChjdHgsIDB4NDAwOGUwLCAyKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4ZjgsIDIpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0YyB8fAorCQkgICAgKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHg2MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAwOWY4LCAxKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBhMDAsIDczKTsKKwlncl9kZWYoY3R4LCAweDQwMGIwYywgMHgwYjBiMGIwYyk7CisJY3BfY3R4KGN0eCwgMHg0MDEwMDAsIDQpOworCWNwX2N0eChjdHgsIDB4NDA1MDA0LCAxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAzNDQ4LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0NDgsIDB4MDAwMDEwMTApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcF9jdHgoY3R4LCAweDQwMzQ0MCwgMSk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDQwOgorCQkJZ3JfZGVmKGN0eCwgMHg0MDM0NDAsIDB4MDAwMDAwMTApOworCQkJYnJlYWs7CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDQ2OgorCQljYXNlIDB4NGE6CisJCQlncl9kZWYoY3R4LCAweDQwMzQ0MCwgMHgwMDAwMzAxMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRjOgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg2NzoKKwkJZGVmYXVsdDoKKwkJCWdyX2RlZihjdHgsIDB4NDAzNDQwLCAweDAwMDAxMDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK252NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2Qoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTg4MCwgNTEpOworCQlncl9kZWYoY3R4LCAweDQwMTk0MCwgMHgwMDAwMDEwMCk7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NyB8fAorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQ5IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4NGIpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4ODAsIDMyKTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMTg4MCArIChpICogNCksIDB4MDAwMDAxMTEpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NikKKwkJCWNwX2N0eChjdHgsIDB4NDAxOTAwLCAxNik7CisJCWNwX2N0eChjdHgsIDB4NDAxOTQwLCAzKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDE5NGMsIDE4KTsKKwlncl9kZWYoY3R4LCAweDQwMTk1NCwgMHgwMDAwMDExMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5NTgsIDB4MDAwODAwNjApOworCWdyX2RlZihjdHgsIDB4NDAxOTc0LCAweDAwMDAwMDgwKTsKKwlncl9kZWYoY3R4LCAweDQwMTk3OCwgMHhmZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5N2MsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIDB4NDAxOTkwLCAweDQ2NDAwMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMik7CisJCWNwX2N0eChjdHgsIDB4NDAxOWFjLCA1KTsKKwl9IGVsc2UgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMSk7CisJCWNwX2N0eChjdHgsIDB4NDAxOWI0LCAzKTsKKwl9CisJZ3JfZGVmKGN0eCwgMHg0MDE5YmMsIDB4ZmZmZjAwMDApOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAxOWMwLCAxOCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDE5YzAgKyAoaSAqIDQpLCAweDg4ODg4ODg4KTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAxYTA4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWExMCwgMHgwZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhMTQsIDB4MGZmZjAwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYTFjLCAweDAwMDExMTAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWEyYywgNCk7CisJY3BfY3R4KGN0eCwgMHg0MDFhNDQsIDI2KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJZ3JfZGVmKGN0eCwgMHg0MDFhNDQgKyAoaSAqIDQpLCAweDA3ZmYwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMWE4YywgMHg0YjdmZmZmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYjgsIDMpOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxYWI4LCAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYzAsIDEpOworCX0KKwljcF9jdHgoY3R4LCAweDQwMWFkMCwgOCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZDAsIDB4MzAyMDEwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYWQ0LCAweDcwNjA1MDQwKTsKKwlncl9kZWYoY3R4LCAweDQwMWFkOCwgMHhiOGE4OTg4OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZGMsIDB4ZjhlOGQ4YzgpOworCWNwX2N0eChjdHgsIDB4NDAxYjEwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMiA6IDEpOworCWdyX2RlZihjdHgsIDB4NDAxYjEwLCAweDQwMTAwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWIxOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDYgOiA1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIyOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/CisJCQkgICAgICAweDAwMDAwMDA0IDogMHgwMDAwMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiMzAsIDI1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIzNCwgMHgwMDAwZmZmZik7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNjgsIDB4NDM1MTg1ZDYpOworCWdyX2RlZihjdHgsIDB4NDAxYjZjLCAweDIxNTViNjk5KTsKKwlncl9kZWYoY3R4LCAweDQwMWI3MCwgMHhmZWRjYmE5OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNzQsIDB4MDAwMDAwOTgpOworCWdyX2RlZihjdHgsIDB4NDAxYjg0LCAweGZmZmZmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMWI4OCwgMHgwMGZmNzAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiOGMsIDB4MDAwMGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ0ICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGEgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0ZSkKKwkJY3BfY3R4KGN0eCwgMHg0MDFiOTQsIDEpOworCWNwX2N0eChjdHgsIDB4NDAxYjk4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWI5YywgMHgwMGZmMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiYzAsIDkpOworCWdyX2RlZihjdHgsIDB4NDAxYmUwLCAweDAwZmZmZjAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWMwMCwgMTkyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeyAvKiBmcmFnbWVudCB0ZXh0dXJlIHVuaXRzICovCisJCWdyX2RlZihjdHgsIDB4NDAxYzQwICsgKGkgKiA0KSwgMHgwMDAxODQ4OCk7CisJCWdyX2RlZihjdHgsIDB4NDAxYzgwICsgKGkgKiA0KSwgMHgwMDAyODIwMik7CisJCWdyX2RlZihjdHgsIDB4NDAxZDAwICsgKGkgKiA0KSwgMHgwMDAwYWFlNCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDQwICsgKGkgKiA0KSwgMHgwMTAxMjAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDgwICsgKGkgKiA0KSwgMHgwMDA4MDAwOCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZTAwICsgKGkgKiA0KSwgMHgwMDEwMDAwOCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsgLyogdmVydGV4IHRleHR1cmUgdW5pdHMgKi8KKwkJZ3JfZGVmKGN0eCwgMHg0MDFlOTAgKyAoaSAqIDQpLCAweDAwMDFiYzgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYTAgKyAoaSAqIDQpLCAweDAwMDAwMjAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYzAgKyAoaSAqIDQpLCAweDAwMDAwMDA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlZTAgKyAoaSAqIDQpLCAweDAwMDgwMDA4KTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBmNWMsIDMpOworCWdyX2RlZihjdHgsIDB4NDAwZjVjLCAweDAwMDAwMDAyKTsKKwljcF9jdHgoY3R4LCAweDQwMGY4NCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zdGF0ZTNkXzIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwljcF9jdHgoY3R4LCAweDQwMjAwMCwgMSk7CisJY3BfY3R4KGN0eCwgMHg0MDI0MDQsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPyAxIDogMik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMDEpOworCQlicmVhazsKKwljYXNlIDB4NGM6CisJY2FzZSAweDRlOgorCWNhc2UgMHg2NzoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMjApOworCQlicmVhazsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDA0MjEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlncl9kZWYoY3R4LCAweDQwMjQwNCwgMHgwMDAwMDAyMSk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQlncl9kZWYoY3R4LCAweDQwMjQwOCwgMHgwMzBjMzBjMyk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NDoKKwljYXNlIDB4NDY6CisJY2FzZSAweDRhOgorCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCQljcF9jdHgoY3R4LCAweDQwMjQ0MCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyNDQwLCAweDAwMDExMDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAyNDgwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gOCA6IDkpOworCWdyX2RlZihjdHgsIDB4NDAyNDg4LCAweDNlMDIwMjAwKTsKKwlncl9kZWYoY3R4LCAweDQwMjQ4YywgMHgwMGZmZmZmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0OTAsIDB4NjAxMDNmMDApOworCQlicmVhazsKKwljYXNlIDB4NDc6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDQwMTAzZjAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQxOgorCWNhc2UgMHg0MjoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQlncl9kZWYoY3R4LCAweDQwMjQ5MCwgMHgyMDEwM2YwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDBjMTAzZjAwKTsKKwkJYnJlYWs7CisJfQorCWdyX2RlZihjdHgsIDB4NDAyNDljLCBkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDQzID8KKwkJCSAgICAgIDB4MDAwMjAwMDAgOiAweDAwMDQwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMjUwMCwgMzEpOworCWdyX2RlZihjdHgsIDB4NDAyNTMwLCAweDAwMDA4MTAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJY3BfY3R4KGN0eCwgMHg0MDI1N2MsIDYpOworCWNwX2N0eChjdHgsIDB4NDAyNTk0LCAxNik7CisJY3BfY3R4KGN0eCwgMHg0MDI4MDAsIDE3KTsKKwlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NzoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQljcF9jdHgoY3R4LCAweDQwMjg2NCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyODY0LCAweDAwMDAxMDAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NzAsIDMpOworCQlncl9kZWYoY3R4LCAweDQwMjg3OCwgMHgwMDAwMDAwMyk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ3KSB7IC8qIGJlbG9uZyBhdCBlbmQhISAqLworCQkJY3BfY3R4KGN0eCwgMHg0MDI5MDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5NDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5ODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5YzAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhMDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhNDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhYzAsIDEpOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg0MDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMTAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDI4NTQsIDB4MDAwMDAwMDMpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMmMwMCwgNCk7CisJZ3JfZGVmKGN0eCwgMHg0MDJjMDAsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPworCQkJICAgICAgMHg4MDgwMDAwMSA6IDB4MDA4ODgwMDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDQwKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMmM0MCArIChpICogNCksIDB4ZmZmZmZmZmYpOworCQljcF9jdHgoY3R4LCAweDQwMzBiOCwgMTMpOworCQlncl9kZWYoY3R4LCAweDQwMzBkYywgMHgwMDAwMDAwNSk7CisJCWdyX2RlZihjdHgsIDB4NDAzMGU4LCAweDAwMDBmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMTAsIDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAyYzIwLCAzNik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4NDIpCisJCQljcF9jdHgoY3R4LCAweDQwMmMyMCwgMjQpOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDRhKQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDE2KTsKKwkJZWxzZQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDgpOworCQljcF9jdHgoY3R4LCAweDQwMmNiMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDEyIDogMTMpOworCQlncl9kZWYoY3R4LCAweDQwMmNkNCwgMHgwMDAwMDAwNSk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDJjZTAsIDB4MDAwMGZmZmYpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMzQwMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQxMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQyMCwgbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldikpOworCWZvciAoaSA9IDA7IGkgPCBudjQwX2dyYXBoX3ZzX2NvdW50KGN0eC0+ZGV2KTsgaSsrKQorCQlncl9kZWYoY3R4LCAweDQwMzQyMCArIChpICogNCksIDB4MDAwMDU1NTUpOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDM2MDAsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMzYwMCwgMHgwMDAwMDAwMSk7CisJfQorCWNwX2N0eChjdHgsIDB4NDAzODAwLCAxKTsKKworCWNwX2N0eChjdHgsIDB4NDAzYzE4LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwM2MxOCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDUwMTgsIDEpOworCQlncl9kZWYoY3R4LCAweDQwNTAxOCwgMHgwOGUwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDA1YzI0LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDVjMjQsIDB4MDAwZTMwMDApOworCQlicmVhazsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGUpCisJCWNwX2N0eChjdHgsIDB4NDA1ODAwLCAxMSk7CisJY3BfY3R4KGN0eCwgMHg0MDcwMDAsIDEpOworfQorCitzdGF0aWMgdm9pZAorbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJaW50IGxlbiA9IG52NDBfZ3JhcGhfNDA5NyhjdHgtPmRldikgPyAweDA2ODQgOiAweDAwODQ7CisKKwljcF9vdXQgKGN0eCwgMHgzMDAwMDApOworCWNwX2xzciAoY3R4LCBsZW4gLSA0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX3N3YXBfc3RhdGUzZF8zX2lzX3NhdmUpOworCWNwX2xzciAoY3R4LCBsZW4pOworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlM2RfM19pc19zYXZlKTsKKwljcF9vdXQgKGN0eCwgMHg4MDAwMDEpOworCisJY3R4LT5jdHh2YWxzX3BvcyArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IGN0eC0+ZGF0YTsKKwlpbnQgdnMsIHZzX25yLCB2c19sZW4sIHZzX25yX2IwLCB2c19ucl9iMSwgYjBfb2Zmc2V0LCBiMV9vZmZzZXQ7CisJaW50IG9mZnNldCwgaTsKKworCXZzX25yICAgID0gbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldik7CisJdnNfbnJfYjAgPSAzNjM7CisJdnNfbnJfYjEgPSBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMTI4IDogNjQ7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJYjBfb2Zmc2V0ID0gMHgyMjAwLzQ7IC8qIDMzYTAgKi8KKwkJYjFfb2Zmc2V0ID0gMHg1NWEwLzQ7IC8qIDE1MDAgKi8KKwkJdnNfbGVuID0gMHg2YWEwLzQ7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDEgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MikgeworCQliMF9vZmZzZXQgPSAweDIyMDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDQ0MDAvNDsgLyogMGIwMCAqLworCQl2c19sZW4gPSAweDRmMDAvNDsKKwl9IGVsc2UgeworCQliMF9vZmZzZXQgPSAweDFkNDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDNmNDAvNDsgLyogMGIwMCA6IDBhNDAgKi8KKwkJdnNfbGVuID0gbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDRhNDAvNCA6IDB4NDk4MC80OworCX0KKworCWNwX2xzcihjdHgsIHZzX2xlbiAqIHZzX25yICsgMHgzMDAvNCk7CisJY3Bfb3V0KGN0eCwgbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDgwMDA0MSA6IDB4ODAwMDI5KTsKKworCW9mZnNldCA9IGN0eC0+Y3R4dmFsc19wb3M7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAoMHgwMzAwLzQgKyAodnNfbnIgKiB2c19sZW4pKTsKKworCWlmIChjdHgtPm1vZGUgIT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlyZXR1cm47CisKKwlvZmZzZXQgKz0gMHgwMjgwLzQ7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSAyKQorCQludl93bzMyKGRldiwgb2JqLCBvZmZzZXQsIDB4M2Y4MDAwMDApOworCisJZm9yICh2cyA9IDA7IHZzIDwgdnNfbnI7IHZzKyssIG9mZnNldCArPSB2c19sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IHZzX25yX2IwICogNjsgaSArPSA2KQorCQkJbnZfd28zMihkZXYsIG9iaiwgb2Zmc2V0ICsgYjBfb2Zmc2V0ICsgaSwgMHgwMDAwMDAwMSk7CisJCWZvciAoaSA9IDA7IGkgPCB2c19ucl9iMSAqIDQ7IGkgKz0gNCkKKwkJCW52X3dvMzIoZGV2LCBvYmosIG9mZnNldCArIGIxX29mZnNldCArIGksIDB4M2Y4MDAwMDApOworCX0KK30KKwordm9pZAorbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogZGVjaWRlIHdoZXRoZXIgd2UncmUgbG9hZGluZy91bmxvYWRpbmcgdGhlIGNvbnRleHQgKi8KKwljcF9icmEgKGN0eCwgQVVUT19TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKwljcF9icmEgKGN0eCwgVVNFUl9TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKworCWNwX25hbWUoY3R4LCBjcF9jaGVja19sb2FkKTsKKwljcF9icmEgKGN0eCwgQVVUT19MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX0xPQUQsIFBFTkRJTkcsIGNwX3NldHVwX2xvYWQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX2V4aXQpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgbG9hZCAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX1NXQVApOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX291dCAoY3R4LCAweDAwOTEwODgwKTsgLyogPz8gKi8KKwljcF9vdXQgKGN0eCwgMHgwMDkwMWZmZSk7IC8qID8/ICovCisJY3Bfb3V0IChjdHgsIDB4MDE5NDAwMDApOyAvKiA/PyAqLworCWNwX2xzciAoY3R4LCAweDIwKTsKKwljcF9vdXQgKGN0eCwgMHgwMDYwMDAwYik7IC8qID8/ICovCisJY3Bfd2FpdChjdHgsIFVOSzU3LCBDTEVBUik7CisJY3Bfb3V0IChjdHgsIDB4MDA2MDAwMGMpOyAvKiA/PyAqLworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOworCisJLyogZ2VuZXJhbCBQR1JBUEggc3RhdGUgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc3dhcF9zdGF0ZSk7CisJY3BfcG9zIChjdHgsIDB4MDAwMjAvNCk7CisJbnY0MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZXJhbChjdHgpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCisJLyogM0Qgc3RhdGUsIGJsb2NrIDEgKi8KKwljcF9icmEgKGN0eCwgVU5LNTQsIENMRUFSLCBjcF9wcmVwYXJlX2V4aXQpOworCW52NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2QoY3R4KTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKworCS8qIDNEIHN0YXRlLCBibG9jayAyICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8yKGN0eCk7CisKKwkvKiBTb21lIG90aGVyIGJsb2NrIG9mICJyYW5kb20iIHN0YXRlICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKGN0eCk7CisKKwkvKiBQZXItdmVydGV4IHNoYWRlciBzdGF0ZSAqLworCWNwX3BvcyAoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwludjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoY3R4KTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX2NoZWNrX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggZjhlMjhhMS4uMTE4ZDMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl2b2lkIF9faW9tZW0gKmx1dCA9IG52Ym9fa21hcF9vYmpfaW92aXJ0dWFsKG52X2NydGMtPmx1dC5udmJvKTsKIAlpbnQgaTsKIAotCU5WX0RFQlVHKGNydGMtPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGNydGMtPmRldiwgIlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJd3JpdGV3KG52X2NydGMtPmx1dC5yW2ldID4+IDIsIGx1dCArIDgqaSArIDApOwpAQCAtNjgsOCArNjgsOCBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IGluZGV4ID0gbnZfY3J0Yy0+aW5kZXgsIHJldDsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7Ci0JTlZfREVCVUcoZGV2LCAiJXNcbiIsIGJsYW5rZWQgPyAiYmxhbmtlZCIgOiAidW5ibGFua2VkIik7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgIiVzXG4iLCBibGFua2VkID8gImJsYW5rZWQiIDogInVuYmxhbmtlZCIpOwogCiAJaWYgKGJsYW5rZWQpIHsKIAkJbnZfY3J0Yy0+Y3Vyc29yLmhpZGUobnZfY3J0YywgZmFsc2UpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyICsgKHVwZGF0ZSA/IDIgOiAwKSk7CiAJaWYgKHJldCkgewpAQCAtMTkzLDcgKzE5Myw3IEBACiAJdWludDMyX3Qgb3V0WCwgb3V0WSwgaG9yaXosIHZlcnQ7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKHNjYWxpbmdfbW9kZSkgewogCWNhc2UgRFJNX01PREVfU0NBTEVfTk9ORToKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCS8qIERpc2Nvbm5lY3QgYWxsIHVudXNlZCBlbmNvZGVycy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCW52NTBfY3J0Y19ibGFuayhudl9jcnRjLCBmYWxzZSk7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZyYW1lYnVmZmVyICpmYiA9IG5vdXZlYXVfZnJhbWVidWZmZXIoZHJtX2ZiKTsKIAlpbnQgcmV0LCBmb3JtYXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCiAJc3dpdGNoIChkcm1fZmItPmRlcHRoKSB7CiAJY2FzZSAgODoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiAJKm52X2NydGMtPm1vZGUgPSAqYWRqdXN0ZWRfbW9kZTsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CiAKIAloc3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydDsKIAl2c3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydDsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBOVUxMOwogCWludCByZXQsIGk7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKCpudl9jcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3Vyc29yLmMKaW5kZXggZTJlNzlhOC4uNzUzZTcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2N1cnNvci5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKHVwZGF0ZSAmJiBudl9jcnRjLT5jdXJzb3IudmlzaWJsZSkKIAkJcmV0dXJuOwpAQCAtNzYsNyArNzYsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudl9jcnRjLT5iYXNlLmRldjsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmICh1cGRhdGUgJiYgIW52X2NydGMtPmN1cnNvci52aXNpYmxlKQogCQlyZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkCiBudjUwX2N1cnNvcl9zZXRfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMsIHVpbnQzMl90IG9mZnNldCkKIHsKLQlOVl9ERUJVRyhudl9jcnRjLT5iYXNlLmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKG52X2NydGMtPmJhc2UuZGV2LCAiXG4iKTsKIAlpZiAob2Zmc2V0ID09IG52X2NydGMtPmN1cnNvci5vZmZzZXQpCiAJCXJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCBpZHggPSBudl9jcnRjLT5pbmRleDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DVVJTT1JfQ1VSU09SX0NUUkwyKGlkeCksIDApOwogCWlmICghbnZfd2FpdChOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaWR4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IGZiNTgzOGUuLmYwOGYwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNDQsNyArNDQsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewpAQCAtODEsMTEgKzgxLDExIEBACiAJLyogVXNlIGJpb3MgcHJvdmlkZWQgdmFsdWUgaWYgcG9zc2libGUuICovCiAJaWYgKGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbCkgewogCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWw7Ci0JCU5WX0RFQlVHKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiVXNpbmcgYmlvcyBwcm92aWRlZCBsb2FkX3BhdHRlcm4gb2YgJWRcbiIsCiAJCQkgIGxvYWRfcGF0dGVybik7CiAJfSBlbHNlIHsKIAkJbG9hZF9wYXR0ZXJuID0gMzQwOwotCQlOVl9ERUJVRyhkZXYsICJVc2luZyBkZWZhdWx0IGxvYWRfcGF0dGVybiBvZiAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGRlZmF1bHQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJIGxvYWRfcGF0dGVybik7CiAJfQogCkBAIC0xMDMsOSArMTAzLDkgQEAKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKIAlpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlOVl9ERUJVRyhkZXYsICJMb2FkIHdhcyBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgZGV0ZWN0ZWQgb24gb3V0cHV0IHdpdGggb3IgJWRcbiIsIG9yKTsKIAllbHNlCi0JCU5WX0RFQlVHKGRldiwgIkxvYWQgd2FzIG5vdCBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgbm90IGRldGVjdGVkIG9uIG91dHB1dCB3aXRoIG9yICVkXG4iLCBvcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE4LDcgKzExOCw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfREFDX0RQTVNfQ1RSTChvciksCkBAIC0xNzMsNyArMTczLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDAsIG1vZGVfY3RsMiA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEQUMgb3V0cHV0XG4iKTsKIAogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwppbmRleCAxMmM1ZWU2Li5hOTI2M2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJdWludDY0X3Qgc3RhcnQ7CiAJaW50IHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgMHgwMDYxMDE4NCwgbnZfcmQzMihkZXYsIDB4MDA2MTQwMDQpKTsKIAkvKgpAQCAtMjMyLDcgKzIzMiw3IEBACiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVU5LXzM4MCwgMCk7CiAJLyogUkFNIGlzIGNsYW1wZWQgdG8gMjU2IE1pQi4gKi8KIAlyYW1fYW1vdW50ID0gbm91dmVhdV9tZW1fZmJfYW1vdW50KGRldik7Ci0JTlZfREVCVUcoZGV2LCAicmFtX2Ftb3VudCAlZFxuIiwgcmFtX2Ftb3VudCk7CisJTlZfREVCVUdfS01TKGRldiwgInJhbV9hbW91bnQgJWRcbiIsIHJhbV9hbW91bnQpOwogCWlmIChyYW1fYW1vdW50ID4gMjU2KjEwMjQqMTAyNCkKIAkJcmFtX2Ftb3VudCA9IDI1NioxMDI0KjEwMjQ7CiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUkFNX0FNT1VOVCwgcmFtX2Ftb3VudCAtIDEpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IGRybV9jcnRjICpkcm1fY3J0YzsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJtX2NydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpjcnRjID0gbm91dmVhdV9jcnRjKGRybV9jcnRjKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCS8qIGluaXQgYmFzaWMga2VybmVsIG1vZGVzZXR0aW5nICovCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIApAQCAtNjE3LDcgKzYxNyw3IEBACiAJICogQ1JUQyBzZXBhcmF0ZWx5LCBhbmQgc3VibWlzc2lvbiB3aWxsIGJlIGJsb2NrZWQgYnkgdGhlIEdQVQogCSAqIHVudGlsIHdlIGhhbmRsZSBlYWNoIGluIHR1cm4uCiAJICovCi0JTlZfREVCVUcoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCU5WX0RFQlVHX0tNUyhkZXYsICIweDYxMDAzMDogMHglMDh4XG4iLCB1bmszMCk7CiAJaGVhZCA9IGZmcygodW5rMzAgPj4gOSkgJiAzKSAtIDE7CiAJaWYgKGhlYWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQlvciA9IGk7CiAJfQogCi0JTlZfREVCVUcoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKIAlpZiAodHlwZSA9PSBPVVRQVVRfQU5ZKSB7CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gZW5jb2RlciEhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtODExLDcgKzgxMSw3IEBACiAJcGNsayA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfUChoZWFkLCBDTE9DSykpICYgMHgzZmZmZmY7CiAJc2NyaXB0ID0gbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3QoZGV2LCBkY2JlbnQsIHBjbGspOwogCi0JTlZfREVCVUcoZGV2LCAiaGVhZCAlZCBweGNsazogJWRLSHpcbiIsIGhlYWQsIHBjbGspOworCU5WX0RFQlVHX0tNUyhkZXYsICJoZWFkICVkIHB4Y2xrOiAlZEtIelxuIiwgaGVhZCwgcGNsayk7CiAKIAlpZiAoZGNiZW50LT50eXBlICE9IE9VVFBVVF9EUCkKIAkJbm91dmVhdV9iaW9zX3J1bl9kaXNwbGF5X3RhYmxlKGRldiwgZGNiZW50LCAwLCAtMik7CkBAIC04NzAsNyArODcwLDcgQEAKIAkJdWludDMyX3QgaW50cjAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzApOwogCQl1aW50MzJfdCBpbnRyMSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSk7CiAKLQkJTlZfREVCVUcoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOwogCiAJCWlmIChpbnRyMSAmIE5WNTBfUERJU1BMQVlfSU5UUl8xX0NMS19VTksxMCkKIAkJCW52NTBfZGlzcGxheV91bmsxMF9oYW5kbGVyKGRldik7CkBAIC05NzQsNyArOTc0LDcgQEAKIAkJdWludDMyX3QgaW50cjEgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzEpOwogCQl1aW50MzJfdCBjbG9jazsKIAotCQlOVl9ERUJVRyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CiAKIAkJaWYgKCFpbnRyMCAmJiAhKGludHIxICYgfmRlbGF5ZWQpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCmluZGV4IDc3YWUxYWEuLmI3MjgyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCiAJY2hpZCA9IHBmaWZvLT5jaGFubmVsX2lkKGRldik7Ci0JaWYgKGNoaWQgPCAwIHx8IGNoaWQgPj0gZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzKQorCWlmIChjaGlkIDwgMSB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyAtIDEpCiAJCXJldHVybiAwOwogCiAJY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAxNzdkODIyLi5jYTc5ZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0xMDcsOSArMTA3LDEzIEBACiBzdGF0aWMgaW50CiBudjUwX2dyYXBoX2luaXRfY3R4Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKQorCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwogCiAJbnZfd3IzMihkZXYsIDB4NDAwMzIwLCA0KTsKIAludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgMCk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKIG52NTBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwotCW52NDBfZ3JjdHhfZmluaShkZXYpOworCW5vdXZlYXVfZ3JjdHhfZmluaShkZXYpOwogfQogCiB2b2lkCkBAIC0yMDcsNyArMjExLDcgQEAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JbnY0MF9ncmN0eF92YWxzX2xvYWQoZGV2LCBjdHgpOworCW5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKGRldiwgY3R4KTsKIAludl93bzMyKGRldiwgY3R4LCAweDAwMDAwLzQsIGNoYW4tPnJhbWluLT5pbnN0YW5jZSA+PiAxMik7CiAJaWYgKChkZXZfcHJpdi0+Y2hpcHNldCAmIDB4ZjApID09IDB4YTApCiAJCW52X3dvMzIoZGV2LCBjdHgsIDB4MDAwMDQvNCwgMHgwMDAwMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwppbmRleCA4YzI4MDQ2Li5lMzk1YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCU5WX0RFQlVHX0tNUyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJcmV0ID0gUklOR19TUEFDRShldm8sIDIpOwogCWlmIChyZXQpIHsKQEAgLTcwLDcgKzcwLDcgQEAKIAl9CiAKIAlpZiAoZHBlLT5zY3JpcHQwKSB7Ci0JCU5WX0RFQlVHKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAwXG4iLCBudl9lbmNvZGVyLT5vcik7CiAJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIGxlMTZfdG9fY3B1KGRwZS0+c2NyaXB0MCksCiAJCQkJCSAgICBudl9lbmNvZGVyLT5kY2IpOwogCX0KQEAgLTc5LDcgKzc5LDcgQEAKIAkJTlZfRVJST1IoZGV2LCAiU09SLSVkOiBsaW5rIHRyYWluaW5nIGZhaWxlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJaWYgKGRwZS0+c2NyaXB0MSkgewotCQlOVl9ERUJVRyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDFcbiIsIG52X2VuY29kZXItPm9yKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMVxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBsZTE2X3RvX2NwdShkcGUtPnNjcmlwdDEpLAogCQkJCQkgICAgbnZfZW5jb2Rlci0+ZGNiKTsKIAl9CkBAIC05Myw3ICs5Myw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfU09SX0RQTVNfQ1RSTChvciksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0xODIsNyArMTgyLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX3Nvcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlib29sIGR1bTsKIAlpbnQgdHlwZTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBPVVRQVVRfVE1EUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCmluZGV4IDYwMWY0YzAuLmI4MDZmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jCmluZGV4IGQzY2I2NzYuLjUxYzk5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lvYzMyLmMKQEAgLTk1LDggKzk1LDcgQEAKIAkJCSAgJmluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9kZXB0aDMyIHsKQEAgLTEyOSw4ICsxMjgsNyBAQAogCQkJICAmZGVwdGgtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1IxMjhfREVQVEgsICh1bnNpZ25lZCBsb25nKWRlcHRoKTsKIAogfQogCkBAIC0xNTMsOCArMTUxLDcgQEAKIAkJCSAgJnN0aXBwbGUtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9TVElQUExFLCAodW5zaWduZWQgbG9uZylzdGlwcGxlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXN0aXBwbGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9nZXRwYXJhbTMyIHsKQEAgLTE3OCw4ICsxNzUsNyBAQAogCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylnZXRwYXJhbSk7CiB9CiAKIGRybV9pb2N0bF9jb21wYXRfdCAqcjEyOF9jb21wYXRfaW9jdGxzW10gPSB7CkBAIC0yMTAsMTIgKzIwNiwxMCBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShyMTI4X2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IHIxMjhfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IDY1NzhkMTkuLjM4ODE0MGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwpAQCAtNTgsNiArNTgsNyBAQAogfSBhdG9tX2V4ZWNfY29udGV4dDsKIAogaW50IGF0b21fZGVidWcgPSAwOworc3RhdGljIHZvaWQgYXRvbV9leGVjdXRlX3RhYmxlX2xvY2tlZChzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpOwogdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKTsKIAogc3RhdGljIHVpbnQzMl90IGF0b21fYXJnX21hc2tbOF0gPQpAQCAtNTczLDcgKzU3NCw3IEBACiAJZWxzZQogCQlTREVCVUcoIiAgIHRhYmxlOiAlZFxuIiwgaWR4KTsKIAlpZiAoVTE2KGN0eC0+Y3R4LT5jbWRfdGFibGUgKyA0ICsgMiAqIGlkeCkpCi0JCWF0b21fZXhlY3V0ZV90YWJsZShjdHgtPmN0eCwgaWR4LCBjdHgtPnBzICsgY3R4LT5wc19zaGlmdCk7CisJCWF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoY3R4LT5jdHgsIGlkeCwgY3R4LT5wcyArIGN0eC0+cHNfc2hpZnQpOwogfQogCiBzdGF0aWMgdm9pZCBhdG9tX29wX2NsZWFyKGF0b21fZXhlY19jb250ZXh0ICpjdHgsIGludCAqcHRyLCBpbnQgYXJnKQpAQCAtMTA0MCw3ICsxMDQxLDcgQEAKIAlhdG9tX29wX3NociwgQVRPTV9BUkdfTUN9LCB7CiBhdG9tX29wX2RlYnVnLCAwfSx9OwogCi12b2lkIGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCitzdGF0aWMgdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGVfbG9ja2VkKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcykKIHsKIAlpbnQgYmFzZSA9IENVMTYoY3R4LT5jbWRfdGFibGUgKyA0ICsgMiAqIGluZGV4KTsKIAlpbnQgbGVuLCB3cywgcHMsIHB0cjsKQEAgLTEwOTIsNiArMTA5MywxMyBAQAogCQlrZnJlZShlY3R4LndzKTsKIH0KIAordm9pZCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKQoreworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCWF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoY3R4LCBpbmRleCwgcGFyYW1zKTsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworfQorCiBzdGF0aWMgaW50IGF0b21faWlvX2xlbltdID0geyAxLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCAzIH07CiAKIHN0YXRpYyB2b2lkIGF0b21faW5kZXhfaWlvKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGJhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCmluZGV4IDY2NzE4NDguLjQ3ZmQ5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCkBAIC0xMjAsNiArMTIwLDcgQEAKIAogc3RydWN0IGF0b21fY29udGV4dCB7CiAJc3RydWN0IGNhcmRfaW5mbyAqY2FyZDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJdm9pZCAqYmlvczsKIAl1aW50MzJfdCBjbWRfdGFibGUsIGRhdGFfdGFibGU7CiAJdWludDE2X3QgKmlpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCA1ZjQ4NTE1Li45MWFkMGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC00NjkwLDYgKzQ2OTAsMjA1IEBACiAJQVRPTV9QT1dFUk1PREVfSU5GT19WMyBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOwogfSBBVE9NX1BPV0VSUExBWV9JTkZPX1YzOwogCisvKiBOZXcgUFBsaWIgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSCisKK3sKKyAgICBVQ0hBUiB1Y1R5cGU7ICAgICAgICAgICAvLyBvbmUgb2YgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl8qCisgICAgVUNIQVIgdWNJMmNMaW5lOyAgICAgICAgLy8gYXMgaW50ZXJwcmV0ZWQgYnkgREFMIEkyQworICAgIFVDSEFSIHVjSTJjQWRkcmVzczsKKyAgICBVQ0hBUiB1Y0ZhblBhcmFtZXRlcnM7ICAvLyBGYW4gQ29udHJvbCBQYXJhbWV0ZXJzLgorICAgIFVDSEFSIHVjRmFuTWluUlBNOyAgICAgIC8vIEZhbiBNaW5pbXVtIFJQTSAoaHVuZHJlZHMpIC0tIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkuCisgICAgVUNIQVIgdWNGYW5NYXhSUE07ICAgICAgLy8gRmFuIE1heGltdW0gUlBNIChodW5kcmVkcykgLS0gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seS4KKyAgICBVQ0hBUiB1Y1Jlc2VydmVkOyAgICAgICAvLyAtLS0tCisgICAgVUNIQVIgdWNGbGFnczsgICAgICAgICAgLy8gdG8gYmUgZGVmaW5lZAorfSBBVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSOworCisjZGVmaW5lIEFUT01fUFBfRkFOUEFSQU1FVEVSU19UQUNIT01FVEVSX1BVTFNFU19QRVJfUkVWT0xVVElPTl9NQVNLIDB4MGYKKyNkZWZpbmUgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCAgICAvLyBObyBmYW4gaXMgY29ubmVjdGVkIHRvIHRoaXMgY29udHJvbGxlci4KKworI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX05PTkUgICAgICAwCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTE02MyAgICAgIDEgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURNMTAzMiAgIDIgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURNMTAzMCAgIDMgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTVVBNjY0OSAgIDQgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTE02NCAgICAgIDUKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9GNzUzNzUgICAgNiAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9SVjZ4eCAgICAgNworI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNzcwICAgICA4CisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURUNzQ3MyAgIDkKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfU1RBVEUKK3sKKyAgICBVQ0hBUiB1Y05vbkNsb2NrU3RhdGVJbmRleDsKKyAgICBVQ0hBUiB1Y0Nsb2NrU3RhdGVJbmRpY2VzWzFdOyAvLyB2YXJpYWJsZS1zaXplZAorfSBBVE9NX1BQTElCX1NUQVRFOworCisvLy8vIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU6OnVsUGxhdGZvcm1DYXBzCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0JBQ0tCSUFTIDEKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfUE9XRVJQTEFZIDIKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfU0JJT1NQT1dFUlNPVVJDRSA0CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0FTUE1fTDBzIDgKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfQVNQTV9MMSAxNgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9IQVJEV0FSRURDIDMyCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0dFTUlOSVBSSU1BUlkgNjQKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfU1RFUFZEREMgMTI4CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1ZPTFRBR0VDT05UUk9MIDI1NgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9TSURFUE9SVENPTlRST0wgNTEyCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1RVUk5PRkZQTExfQVNQTUwxIDEwMjQKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfSFRMSU5LQ09OVFJPTCAyMDQ4CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFCit7CisgICAgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKKworICAgICAgVUNIQVIgdWNEYXRhUmV2aXNpb247CisKKyAgICAgIFVDSEFSIHVjTnVtU3RhdGVzOworICAgICAgVUNIQVIgdWNTdGF0ZUVudHJ5U2l6ZTsKKyAgICAgIFVDSEFSIHVjQ2xvY2tJbmZvU2l6ZTsKKyAgICAgIFVDSEFSIHVjTm9uQ2xvY2tTaXplOworCisgICAgICAvLyBvZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHRhYmxlIHRvIGFycmF5IG9mIHVjTnVtU3RhdGVzIEFUT01fUFBMSUJfU1RBVEUgc3RydWN0dXJlcworICAgICAgVVNIT1JUIHVzU3RhdGVBcnJheU9mZnNldDsKKworICAgICAgLy8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyB0YWJsZSB0byBhcnJheSBvZiBBU0lDLXNwZWNpZmljIHN0cnVjdHVyZXMsCisgICAgICAvLyBjdXJyZW50bHkgQVRPTV9QUExJQl9DTE9DS19JTkZPLgorICAgICAgVVNIT1JUIHVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQ7CisKKyAgICAgIC8vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoaXMgdGFibGUgdG8gYXJyYXkgb2YgQVRPTV9QUExJQl9OT05DTE9DS19JTkZPCisgICAgICBVU0hPUlQgdXNOb25DbG9ja0luZm9BcnJheU9mZnNldDsKKworICAgICAgVVNIT1JUIHVzQmFja2JpYXNUaW1lOyAgICAvLyBpbiBtaWNyb3NlY29uZHMKKyAgICAgIFVTSE9SVCB1c1ZvbHRhZ2VUaW1lOyAgICAgLy8gaW4gbWljcm9zZWNvbmRzCisgICAgICBVU0hPUlQgdXNUYWJsZVNpemU7ICAgICAgIC8vdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIG9yIHRoZSBleHRlbmRlZCBzdHJ1Y3R1cmUKKworICAgICAgVUxPTkcgdWxQbGF0Zm9ybUNhcHM7ICAgICAgICAgICAgLy8gU2VlIEFUT01fUFBMSUJfQ0FQU18qCisKKyAgICAgIEFUT01fUFBMSUJfVEhFUk1BTENPTlRST0xMRVIgICAgc1RoZXJtYWxDb250cm9sbGVyOworCisgICAgICBVU0hPUlQgdXNCb290Q2xvY2tJbmZvT2Zmc2V0OworICAgICAgVVNIT1JUIHVzQm9vdE5vbkNsb2NrSW5mb09mZnNldDsKKworfSBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOworCisvLy8vIEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTzo6dXNDbGFzc2lmaWNhdGlvbgorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01BU0sgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTk9ORSAgICAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFUVEVSWSAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFMQU5DRUQgICAgICAzCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfUEVSRk9STUFOQ0UgICA1CisvLyAyLCA0LCA2LCA3IGFyZSByZXNlcnZlZAorCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQk9PVCAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9USEVSTUFMICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0xJTUlURURQT1dFUlNPVVJDRSAgICAgMHgwMDIwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fUkVTVCAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9GT1JDRUQgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OXzNEUEVSRk9STUFOQ0UgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fT1ZFUkRSSVZFVEVNUExBVEUgICAgICAweDAyMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VVkRTVEFURSAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OXzNETE9XICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQUNQSSAgICAgICAgICAgICAgICAgICAweDEwMDAKKy8vIHJlbWFpbmluZyAzIGJpdHMgYXJlIHJlc2VydmVkCisKKy8vLy8gQVRPTV9QUExJQl9OT05DTE9DS19JTkZPOjp1bENhcHNBbmRTZXR0aW5ncworI2RlZmluZSBBVE9NX1BQTElCX1NJTkdMRV9ESVNQTEFZX09OTFkgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVRPTV9QUExJQl9TVVBQT1JUU19WSURFT19QTEFZQkFDSyAgICAgICAgIDB4MDAwMDAwMDIKKworLy8gMCBpcyAyLjVHYi9zLCAxIGlzIDVHYi9zCisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1NQRUVEX01BU0sgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1NQRUVEX1NISUZUICAgICAgICAgICAyCisKKy8vIGxhbmVzIC0gMTogMSwgMiwgNCwgOCwgMTIsIDE2IHBlcm1pdHRlZCBieSBQQ0lFIHNwZWMKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAgICAgIDMKKworLy8gbG9va3VwIGludG8gcmVkdWNlZCByZWZyZXNoLXJhdGUgdGFibGUKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1ZBTFVFX01BU0sgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1ZBTFVFX1NISUZUIDgKKworI2RlZmluZSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfVU5MSU1JVEVEICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFXzUwSFogICAgICAgICAxCisvLyAyLTE1IFRCRCBhcyBuZWVkZWQuCisKKyNkZWZpbmUgQVRPTV9QUExJQl9TT0ZUV0FSRV9ESVNBQkxFX0xPQURCQUxBTkNJTkcgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9TT0ZUV0FSRV9FTkFCTEVfU0xFRVBfRk9SX1RJTUVTVEFNUFMgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9FTkFCTEVfVkFSSUJSSUdIVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKworI2RlZmluZSBBVE9NX1BQTElCX0RJU0FMTE9XX09OX0RDICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisKKy8vIENvbnRhaW5lZCBpbiBhbiBhcnJheSBzdGFydGluZyBhdCB0aGUgb2Zmc2V0CisvLyBpbiBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0LgorLy8gcmVmZXJlbmNlZCBmcm9tIEFUT01fUFBMSUJfU1RBVEVfSU5GTzo6dWNOb25DbG9ja1N0YXRlSW5kZXgKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8KK3sKKyAgICAgIFVTSE9SVCB1c0NsYXNzaWZpY2F0aW9uOworICAgICAgVUNIQVIgIHVjTWluVGVtcGVyYXR1cmU7CisgICAgICBVQ0hBUiAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgICAgIFVMT05HICB1bENhcHNBbmRTZXR0aW5nczsKKyAgICAgIFVDSEFSICB1Y1JlcXVpcmVkUG93ZXI7CisgICAgICBVQ0hBUiAgdWNVbnVzZWQxWzNdOworfSBBVE9NX1BQTElCX05PTkNMT0NLX0lORk87CisKKy8vIENvbnRhaW5lZCBpbiBhbiBhcnJheSBzdGFydGluZyBhdCB0aGUgb2Zmc2V0CisvLyBpbiBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1c0Nsb2NrSW5mb0FycmF5T2Zmc2V0LgorLy8gcmVmZXJlbmNlZCBmcm9tIEFUT01fUFBMSUJfU1RBVEU6OnVjQ2xvY2tTdGF0ZUluZGljZXMKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTworeworICAgICAgVVNIT1JUIHVzRW5naW5lQ2xvY2tMb3c7CisgICAgICBVQ0hBUiB1Y0VuZ2luZUNsb2NrSGlnaDsKKworICAgICAgVVNIT1JUIHVzTWVtb3J5Q2xvY2tMb3c7CisgICAgICBVQ0hBUiB1Y01lbW9yeUNsb2NrSGlnaDsKKworICAgICAgVVNIT1JUIHVzVkREQzsKKyAgICAgIFVTSE9SVCB1c1VudXNlZDE7CisgICAgICBVU0hPUlQgdXNVbnVzZWQyOworCisgICAgICBVTE9ORyB1bEZsYWdzOyAvLyBBVE9NX1BQTElCX1I2MDBfRkxBR1NfKgorCit9IEFUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPOworCisvLyB1bEZsYWdzIGluIEFUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19QQ0lFR0VOMiAgICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19VVkRTQUZFICAgICAgICAgICAyCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19CQUNLQklBU0VOQUJMRSAgICA0CisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19NRU1PUllfT0RUX09GRiAgICA4CisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19NRU1PUllfRExMX09GRiAgICAxNgorCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPCisKK3sKKyAgICAgIFVTSE9SVCB1c0xvd0VuZ2luZUNsb2NrTG93OyAgICAgICAgIC8vIExvdyBFbmdpbmUgY2xvY2sgaW4gTUh6ICh0aGUgc2FtZSB3YXkgYXMgb24gdGhlIFI2MDApLgorICAgICAgVUNIQVIgIHVjTG93RW5naW5lQ2xvY2tIaWdoOworICAgICAgVVNIT1JUIHVzSGlnaEVuZ2luZUNsb2NrTG93OyAgICAgICAgLy8gSGlnaCBFbmdpbmUgY2xvY2sgaW4gTUh6LgorICAgICAgVUNIQVIgIHVjSGlnaEVuZ2luZUNsb2NrSGlnaDsKKyAgICAgIFVTSE9SVCB1c01lbW9yeUNsb2NrTG93OyAgICAgICAgICAgIC8vIEZvciBub3cgb25lIG9mIHRoZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19YWFhYIGNvbnN0YW50cy4KKyAgICAgIFVDSEFSICB1Y01lbW9yeUNsb2NrSGlnaDsgICAgICAgICAgIC8vIEN1cnJlbnR5bCB1bnVzZWQuCisgICAgICBVQ0hBUiAgdWNQYWRkaW5nOyAgICAgICAgICAgICAgICAgICAvLyBGb3IgcHJvcGVyIGFsaWdubWVudCBhbmQgc2l6ZS4KKyAgICAgIFVTSE9SVCB1c1ZEREM7ICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgNzgwLCB1c2U6IE5vbmUsIExvdywgSGlnaCwgVmFyaWFibGUKKyAgICAgIFVDSEFSICB1Y01heEhUTGlua1dpZHRoOyAgICAgICAgICAgIC8vIEZyb20gU0JJT1MgLSB7MiwgNCwgOCwgMTZ9CisgICAgICBVQ0hBUiAgdWNNaW5IVExpbmtXaWR0aDsgICAgICAgICAgICAvLyBGcm9tIFNCSU9TIC0gezIsIDQsIDgsIDE2fS4gRWZmZWN0aXZlIG9ubHkgaWYgQ0RMVyBlbmFibGVkLiBNaW5pbXVtIGRvd24gc3RyZWFtIHdpZHRoIGNvdWxkIGJlIGJpZ2dlciBhcyBkaXNwbGF5IEJXIHJlcXVyaWVtZW50LgorICAgICAgVVNIT1JUIHVzSFRMaW5rRnJlcTsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX3h4eCBvciBpbiBNSHooPj0yMDApLgorICAgICAgVUxPTkcgIHVsRmxhZ3M7Cit9IEFUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTzsKKworI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfTk9ORSAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX0hJR0ggICAgICAgMgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfVkFSSUFCTEUgICAzCisKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfTk9ORSAgICAgICAgMCAgIC8vIFdlIGNhbm5vdCBjaGFuZ2UgdGhlIHNpZGUgcG9ydCBtZW1vcnkgY2xvY2ssIGxlYXZlIGl0IGFzIGl0IGlzLgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19MT1cgICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX0hJR0ggICAgICAgIDIKKworI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9MT1cgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX0hJR0ggICAgICAgMgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qICBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBjb21wYXRpYmxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDg0ZTVkZjcuLjcxNzI3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0yODgxLDYgKzI4ODEsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKIAkJaWYgKHRyYWNrLT5jYltpXS5yb2JqID09IE5VTEwpIHsKKwkJCWlmICghKHRyYWNrLT5mYXN0ZmlsbCB8fCB0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrIHx8CisJCQkgICAgICB0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUpKSB7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgY29sb3IgYnVmZmVyICVkICFcbiIsIGkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzE4OGMzNy4uYjI3YTY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTY3LDEzICs2NywxNSBAQAogCXVuc2lnbmVkCQkJaW1tZF9kd29yZHM7CiAJdW5zaWduZWQJCQludW1fYXJyYXlzOwogCXVuc2lnbmVkCQkJbWF4X2luZHg7CisJdW5zaWduZWQJCQljb2xvcl9jaGFubmVsX21hc2s7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkJYXJyYXlzWzExXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJY2JbUjMwMF9NQVhfQ0JdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAl6YjsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzW1IzMDBfVFJBQ0tfTUFYX1RFWFRVUkVdOwogCWJvb2wJCQkJel9lbmFibGVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVfY3ViZTsKLQorCWJvb2wJCQkJZmFzdGZpbGw7CisJYm9vbAkJCQlibGVuZF9yZWFkX2VuYWJsZTsKIH07CiAKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCA4MzQ5MGMyLi4zZjJjYzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtODg3LDYgKzg4NywxNCBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX0RYVDE7CiAJCQlicmVhazsKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9BVEkyTjoKKwkJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1I0MjApIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCisJCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8qIFRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIGZvciBEWFQzLzUuICovCisJCQkvKiBQYXNzIHRocm91Z2guICovCiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUMzoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQ1OgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CkBAIC05NTEsNiArOTU5LDE2IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSB0bXA7CiAJCQl0bXAgPSAoKGlkeF92YWx1ZSA+PiAxNikgJiAxKSA8PCAxMTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHRfMTEgPSB0bXA7CisKKwkJCS8qIEFUSTFOICovCisJCQlpZiAoaWR4X3ZhbHVlICYgKDEgPDwgMTQpKSB7CisJCQkJLyogVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgZm9yIERYVDEuICovCisJCQkJdHJhY2stPnRleHR1cmVzW2ldLmNvbXByZXNzX2Zvcm1hdCA9CisJCQkJCVIxMDBfVFJBQ0tfQ09NUF9EWFQxOworCQkJfQorCQl9IGVsc2UgaWYgKGlkeF92YWx1ZSAmICgxIDw8IDE0KSkgeworCQkJRFJNX0VSUk9SKCJGb3JiaWRkZW4gYml0IFRYRk9STUFUX01TQlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NDQ4MDoKQEAgLTk5Miw2ICsxMDEwLDE4IEBACiAJCX0KIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKKwljYXNlIDB4NGUwYzoKKwkJLyogUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sgKi8KKwkJdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayA9IGlkeF92YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSAweDRkMWM6CisJCS8qIFpCX0JXX0NOVEwgKi8KKwkJdHJhY2stPmZhc3RmaWxsID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOworCQlicmVhazsKKwljYXNlIDB4NGUwNDoKKwkJLyogUkIzRF9CTEVORENOVEwgKi8KKwkJdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOworCQlicmVhazsKIAljYXNlIDB4NGJlODoKIAkJLyogdmFsaWQgcmVnaXN0ZXIgb25seSBvbiBSVjUzMCAqLwogCQlpZiAocC0+cmRldi0+ZmFtaWx5ID09IENISVBfUlY1MzApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKaW5kZXggY2IyZTQ3MC4uMzRiZmZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJaW50IHN6OwogCWludCBhZGRyOwogCWludCB0eXBlOwotCWludCBjbGFtcDsKKwlpbnQgaXNjbGFtcDsKIAlpbnQgc3RyaWRlOwogCVJJTkdfTE9DQUxTOwogCkBAIC05OTksMTAgKzk5OSwxMCBAQAogCWFkZHIgPSAoKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiAxKSA8PCA4KSB8IGhlYWRlci5yNTAwZnAuYWRybG87CiAKIAl0eXBlID0gISEoaGVhZGVyLnI1MDBmcC5hZHJoaV9mbGFncyAmIFI1MDBGUF9DT05TVEFOVF9UWVBFKTsKLQljbGFtcCA9ICEhKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiBSNTAwRlBfQ09OU1RBTlRfQ0xBTVApOworCWlzY2xhbXAgPSAhIShoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgUjUwMEZQX0NPTlNUQU5UX0NMQU1QKTsKIAogCWFkZHIgfD0gKHR5cGUgPDwgMTYpOwotCWFkZHIgfD0gKGNsYW1wIDw8IDE3KTsKKwlhZGRyIHw9IChpc2NsYW1wIDw8IDE3KTsKIAogCXN0cmlkZSA9IHR5cGUgPyA0IDogNjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDRiN2FmZWYuLjE3MzVhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTkwMCw2ICs5MDAsNyBAQAogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfSTMyCQkgICAgMHgxQgogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfSTMyQTMyCQkgICAgMHgxQwogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfUjMyRzMyQjMyQTMyCSAgICAweDFECisjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9BVEkyTgkJICAgIDB4MUYKIAkvKiBhbHBoYSBtb2RlcywgY29udmVuaWVuY2UgbW9zdGx5ICovCiAJLyogaWYgeW91IGhhdmUgYWxwaGEsIHBpY2sgY29uc3RhbnQgYXBwcm9wcmlhdGUgdG8gdGhlCiAJICAgbnVtYmVyIG9mIGNoYW5uZWxzICgxIGZvciBJOCwgMiBmb3IgSThBOCwgNCBmb3IgUjhHOEI4QTgsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCAwZDgyMDc2Li40NDA2MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JKmNzX3JlbG9jID0gJnAtPnJlbG9jc1swXTsKKwkqY3NfcmVsb2MgPSBwLT5yZWxvY3M7CiAJKCpjc19yZWxvYyktPmxvYmouZ3B1X29mZnNldCA9ICh1NjQpcmVsb2NzX2NodW5rLT5rZGF0YVtpZHggKyAzXSA8PCAzMjsKIAkoKmNzX3JlbG9jKS0+bG9iai5ncHVfb2Zmc2V0IHw9IHJlbG9jc19jaHVuay0+a2RhdGFbaWR4ICsgMF07CiAJcmV0dXJuIDA7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlpZiAocC0+Y2h1bmtfcmVsb2NzX2lkeCA9PSAtMSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JcC0+cmVsb2NzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJhZGVvbl9jc19yZWxvYyksIEdGUF9LRVJORUwpOworCXAtPnJlbG9jcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY3NfcmVsb2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAocC0+cmVsb2NzID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggY2Q2NTBmZC4uNTNiNTU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljcmVhdGVkOwogCXN0cnVjdCBsaXN0X2hlYWQJCWVtaXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWduYWxlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9mZW5jZSB7CkBAIC0yMDIsOCArMjAzLDkgQEAKIHN0cnVjdCByYWRlb25fbW1hbiB7CiAJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICAgICAgICBib19nbG9iYWxfcmVmOwogCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKLQlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZQkJYmRldjsKKwlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9ibyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggNjM2MTE2Yi4uZWIyOTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzMsNiArMzMsNyBAQAogICovCiB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCiB1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCi0JLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xNjYsNyArMTY3LDcgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0yNTksNyArMjYwLDcgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggMTJhMGM3Ni4uMzIxMDQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC03NDUsOCArNzQ1LDcgQEAKIAkJZWxzZQogCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCi0JCQkJCQkJCQkoMSA8PAotCQkJCQkJCQkJIGkpLAorCQkJCQkJCQkJKDEgPDwgaSksCiAJCQkJCQkJCQlkYWMpLAogCQkJCQkJICAoMSA8PCBpKSk7CiAJfQpAQCAtNzU4LDMyICs3NTcsMzAgQEAKIAkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLnZhbGlkICYmIChpICE9IGopKSB7CiAJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0ubGluZV9tdXggPT0KIAkJCQkJICAgIGJpb3NfY29ubmVjdG9yc1tqXS5saW5lX211eCkgewotCQkJCQkJaWYgKCgoYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJICAgICAgZGV2aWNlcyAmCi0JCQkJCQkgICAgICAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKQotCQkJCQkJICAgICAmJiAoYmlvc19jb25uZWN0b3JzW2pdLgotCQkJCQkJCSBkZXZpY2VzICYKLQkJCQkJCQkgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpCi0JCQkJCQkgICAgfHwKLQkJCQkJCSAgICAoKGJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCSAgICAgIGRldmljZXMgJgotCQkJCQkJICAgICAgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKLQkJCQkJCSAgICAgJiYgKGJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCQkgZGV2aWNlcyAmCi0JCQkJCQkJIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpKSkgewotCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCQkgICAgZGV2aWNlcyB8PQotCQkJCQkJCSAgICBiaW9zX2Nvbm5lY3RvcnNbal0uCi0JCQkJCQkJICAgIGRldmljZXM7Ci0JCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJCSAgICBjb25uZWN0b3JfdHlwZSA9Ci0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmCi0JCQkJCQkJICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpCisJCQkJCQkvKiBtYWtlIHN1cmUgbm90IHRvIGNvbWJpbmUgTFZEUyAqLworCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgeworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5saW5lX211eCA9IDUzOworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLnZhbGlkID0gZmFsc2U7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmxpbmVfbXV4ID0gNTM7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmRkY19idXMudmFsaWQgPSBmYWxzZTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCS8qIGNvbWJpbmUgYW5hbG9nIGFuZCBkaWdpdGFsIGZvciBEVkktSSAqLworCQkJCQkJaWYgKCgoYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSAmJgorCQkJCQkJICAgICAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSkgfHwKKwkJCQkJCSAgICAoKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkgJiYKKwkJCQkJCSAgICAgKGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpKSB7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgfD0KKwkJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXM7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmNvbm5lY3Rvcl90eXBlID0KKwkJCQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0RWSUk7CisJCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKIAkJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmhwZCA9CiAJCQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0uaHBkOwotCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCQkgICAgdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0udmFsaWQgPSBmYWxzZTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KQEAgLTEyMzQsNiArMTIzMSw2MSBAQAogCXJldHVybiB0cnVlOwogfQogCitlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJc3RydWN0IF9BVE9NX0FOQUxPR19UVl9JTkZPICp0dl9pbmZvOworCWVudW0gcmFkZW9uX3R2X3N0ZCB0dl9zdGQgPSBUVl9TVERfTlRTQzsKKworCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGluZGV4LCBOVUxMLCAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCk7CisKKwl0dl9pbmZvID0gKHN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GTyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCXN3aXRjaCAodHZfaW5mby0+dWNUVl9Cb290VXBEZWZhdWx0U3RhbmRhcmQpIHsKKwljYXNlIEFUT01fVFZfTlRTQzoKKwkJdHZfc3RkID0gVFZfU1REX05UU0M7CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBOVFNDXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX05UU0NKOgorCQl0dl9zdGQgPSBUVl9TVERfTlRTQ19KOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogTlRTQy1KXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTDoKKwkJdHZfc3RkID0gVFZfU1REX1BBTDsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTFxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxNOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMX007CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtTVxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxOOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMX047CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtTlxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxDTjoKKwkJdHZfc3RkID0gVFZfU1REX1BBTF9DTjsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC1DTlxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUw2MDoKKwkJdHZfc3RkID0gVFZfU1REX1BBTF82MDsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC02MFxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9TRUNBTToKKwkJdHZfc3RkID0gVFZfU1REX1NFQ0FNOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogU0VDQU1cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0dl9zdGQgPSBUVl9TVERfTlRTQzsKKwkJRFJNX0lORk8oIlVua25vd24gVFYgc3RhbmRhcmQ7IGRlZmF1bHRpbmcgdG8gTlRTQ1xuIik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdHZfc3RkOworfQorCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICoKIHJhZGVvbl9hdG9tYmlvc19nZXRfdHZfZGFjX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQogewpAQCAtMTI2OSw2ICsxMzIxLDcgQEAKIAkJZGFjID0gZGFjX2luZm8tPnVjREFDMl9OVFNDX0RBQ19BZGp1c3RtZW50OwogCQl0dl9kYWMtPm50c2NfdHZkYWNfYWRqID0gKGJnIDw8IDE2KSB8IChkYWMgPDwgMjApOwogCisJCXR2X2RhYy0+dHZfc3RkID0gcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHJkZXYpOwogCX0KIAlyZXR1cm4gdHZfZGFjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwppbmRleCBiMDYyMTA5Li44MTJmMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwpAQCAtNjIsNyArNjIsNyBAQAogfQogCiAvKiAxMCBraHogKi8KLXN0YXRpYyB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9wbGwgKm1wbGwgPSAmcmRldi0+Y2xvY2subXBsbDsKIAl1aW50MzJfdCBmYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2LCBtY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IGM1MDIxYTMuLmZkOTRkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTYzNCwxMSArNjM0LDEwIEBACiAJcmV0dXJuIHBfZGFjOwogfQogCi1zdGF0aWMgZW51bSByYWRlb25fdHZfc3RkCi1yYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpCitlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJkZXYtPmRkZXY7CiAJdWludDE2X3QgdHZfaW5mbzsKIAllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CiAKQEAgLTc3OSw3ICs3NzgsNyBAQAogCQkJdHZfZGFjLT5udHNjX3R2ZGFjX2FkaiA9IChiZyA8PCAxNikgfCAoZGFjIDw8IDIwKTsKIAkJCWZvdW5kID0gMTsKIAkJfQotCQl0dl9kYWMtPnR2X3N0ZCA9IHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKGVuY29kZXIpOworCQl0dl9kYWMtPnR2X3N0ZCA9IHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHJkZXYpOwogCX0KIAlpZiAoIWZvdW5kKSB7CiAJCS8qIHRoZW4gY2hlY2sgQ1JUIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNWVlY2UxOC4uMjAxNjE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMjA4LDYgKzIwOCwxOCBAQAogCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCQlEUk1fREVCVUcoIkFkZGluZyBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CisJfSBlbHNlIGlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgIT0gMCAmJgorCQkgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgIT0gMCkgeworCQkvKiBtYWMgbGFwdG9wcyB3aXRob3V0IGFuIGVkaWQgKi8KKwkJLyogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBleGFjdCBwYW5lbCBtb2RlLAorCQkgKiBidXQgYW4gYXBwcm94aW1hdGlvbiBiYXNlZCBvbiB0aGUgY3Z0IGZvcm11bGEuICBGb3IgdGhlc2UKKwkJICogc3lzdGVtcyB3ZSBzaG91bGQgaWRlYWxseSByZWFkIHRoZSBtb2RlIGluZm8gb3V0IG9mIHRoZQorCQkgKiByZWdpc3RlcnMgb3IgYWRkIGEgbW9kZSB0YWJsZSwgYnV0IHRoaXMgd29ya3MgYW5kIGlzIG11Y2gKKwkJICogc2ltcGxlci4KKwkJICovCisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBuYXRpdmVfbW9kZS0+aGRpc3BsYXksIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSwgNjAsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVSOworCQlEUk1fREVCVUcoIkFkZGluZyBjdnQgYXBwcm94aW1hdGlvbiBvZiBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CiAJfQogCXJldHVybiBtb2RlOwogfQpAQCAtMTE3MSw3ICsxMTgzLDcgQEAKIAkJCQkJCSAgICAgIDEpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICByYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2luZm8ocmRldikpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CkBAIC0xMzE1LDcgKzEzMjcsNyBAQAogCQkJCQkJICAgICAgMSk7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby50dl9zdGRfcHJvcGVydHksCi0JCQkJCQkgICAgICAxKTsKKwkJCQkJCSAgICAgIHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHJkZXYpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCAwMmJjZGIxLi43YzY4NDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMzkxLDYgKzM5MSwxMiBAQAogCQkvKiBGSVhNRTogbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlyZGV2LT5hc2ljLT5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTDsKKwkJcmRldi0+YXNpYy0+c2V0X21lbW9yeV9jbG9jayA9IE5VTEw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4MSw2ICs0ODcsNyBAQAogCWF0b21fY2FyZF9pbmZvLT5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZTsKIAogCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKGF0b21fY2FyZF9pbmZvLCByZGV2LT5iaW9zKTsKKwltdXRleF9pbml0KCZyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5tdXRleCk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlhdG9tX2FsbG9jYXRlX2ZiX3NjcmF0Y2gocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJcmV0dXJuIDA7CkBAIC01MzksOSArNTQ2LDcyIEBACiAJfQogfQogCi0vKgotICogUmFkZW9uIGRldmljZS4KLSAqLwordm9pZCByYWRlb25fY2hlY2tfYXJndW1lbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIHZyYW1saW1pdCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvICovCisJc3dpdGNoIChyYWRlb25fdnJhbV9saW1pdCkgeworCWNhc2UgMDoKKwljYXNlIDQ6CisJY2FzZSA4OgorCWNhc2UgMTY6CisJY2FzZSAzMjoKKwljYXNlIDY0OgorCWNhc2UgMTI4OgorCWNhc2UgMjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJY2FzZSA0MDk2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihyZGV2LT5kZXYsICJ2cmFtIGxpbWl0ICglZCkgbXVzdCBiZSBhIHBvd2VyIG9mIDJcbiIsCisJCQkJcmFkZW9uX3ZyYW1fbGltaXQpOworCQlyYWRlb25fdnJhbV9saW1pdCA9IDA7CisJCWJyZWFrOworCX0KKwlyYWRlb25fdnJhbV9saW1pdCA9IHJhZGVvbl92cmFtX2xpbWl0IDw8IDIwOworCS8qIGd0dCBzaXplIG11c3QgYmUgcG93ZXIgb2YgdHdvIGFuZCBncmVhdGVyIG9yIGVxdWFsIHRvIDMyTSAqLworCXN3aXRjaCAocmFkZW9uX2dhcnRfc2l6ZSkgeworCWNhc2UgNDoKKwljYXNlIDg6CisJY2FzZSAxNjoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZ2FydCBzaXplICglZCkgdG9vIHNtYWxsIGZvcmNpbmcgdG8gNTEyTVxuIiwKKwkJCQlyYWRlb25fZ2FydF9zaXplKTsKKwkJcmFkZW9uX2dhcnRfc2l6ZSA9IDUxMjsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwljYXNlIDY0OgorCWNhc2UgMTI4OgorCWNhc2UgMjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJY2FzZSA0MDk2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihyZGV2LT5kZXYsICJnYXJ0IHNpemUgKCVkKSBtdXN0IGJlIGEgcG93ZXIgb2YgMlxuIiwKKwkJCQlyYWRlb25fZ2FydF9zaXplKTsKKwkJcmFkZW9uX2dhcnRfc2l6ZSA9IDUxMjsKKwkJYnJlYWs7CisJfQorCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCS8qIEFHUCBtb2RlIGNhbiBvbmx5IGJlIC0xLCAxLCAyLCA0LCA4ICovCisJc3dpdGNoIChyYWRlb25fYWdwbW9kZSkgeworCWNhc2UgLTE6CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiaW52YWxpZCBBR1AgbW9kZSAlZCAodmFsaWQgbW9kZTogIgorCQkJCSItMSwgMCwgMSwgMiwgNCwgOClcbiIsIHJhZGVvbl9hZ3Btb2RlKTsKKwkJcmFkZW9uX2FncG1vZGUgPSAwOworCQlicmVhazsKKwl9Cit9CisKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKIAkJICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtNTgwLDkgKzY1MCw5IEBACiAKIAkvKiBTZXQgYXNpYyBmdW5jdGlvbnMgKi8KIAlyID0gcmFkZW9uX2FzaWNfaW5pdChyZGV2KTsKLQlpZiAocikgeworCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CisJcmFkZW9uX2NoZWNrX2FyZ3VtZW50cyhyZGV2KTsKIAogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1AgJiYgcmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKIAkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGExMzNiODMuLjkxZDcyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTczOSw3ICs3MzksNyBAQAogCXsgVFZfU1REX1NFQ0FNLCAic2VjYW0iIH0sCiB9OwogCi1pbnQgcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCByYWRlb25fbW9kZXNldF9jcmVhdGVfcHJvcHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGksIHN6OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IGRiZDU2ZWYuLjhiYTNkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApAQCAtMjg0LDcgKzI4NCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSByYWRlb25fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDBkMWQ5MDguLmNjYmE5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMjMzLDYgKzIzMyw4IEBACiAJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKIAkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CisJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ID0gbW9kZS0+aGRpc3BsYXk7CisJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KIAkJYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZCA9IG1vZGVfaWQ7CiAJfQpAQCAtNDk1LDkgKzQ5Nyw5IEBACiAJCQkJYXJncy52MS51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0hETUlfVFlQRTsKIAkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDApKQorCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmIEFUT01fUEFORUxfTUlTQ19EVUFMKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfRFVBTDsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSAoMSA8PCAxKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQpAQCAtNTI0LDE4ICs1MjYsMTggQEAKIAkJCWFyZ3MudjIudWNUZW1wb3JhbCA9IDA7CiAJCQlhcmdzLnYyLnVjRlJDID0gMDsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAwKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfRFVBTCkKIAkJCQkJYXJncy52Mi51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0RVQUw7Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgNSkpIHsKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfU1BBVElBTCkgewogCQkJCQlhcmdzLnYyLnVjU3BhdGlhbCA9IFBBTkVMX0VOQ09ERVJfU1BBVElBTF9ESVRIRVJfRU47Ci0JCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDEpKQorCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQkJYXJncy52Mi51Y1NwYXRpYWwgfD0gUEFORUxfRU5DT0RFUl9TUEFUSUFMX0RJVEhFUl9ERVBUSDsKIAkJCQl9Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgNikpIHsKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfVEVNUE9SQUwpIHsKIAkJCQkJYXJncy52Mi51Y1RlbXBvcmFsID0gUEFORUxfRU5DT0RFUl9URU1QT1JBTF9ESVRIRVJfRU47Ci0JCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDEpKQorCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQkJYXJncy52Mi51Y1RlbXBvcmFsIHw9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfRElUSEVSX0RFUFRIOwotCQkJCQlpZiAoKChkaWctPmx2ZHNfbWlzYyA+PiAyKSAmIDB4MykgPT0gMikKKwkJCQkJaWYgKCgoZGlnLT5sdmRzX21pc2MgPj4gQVRPTV9QQU5FTF9NSVNDX0dSRVlfTEVWRUxfU0hJRlQpICYgMHgzKSA9PSAyKQogCQkJCQkJYXJncy52Mi51Y1RlbXBvcmFsIHw9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfTEVWRUxfNDsKIAkJCQl9CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKaW5kZXggY2I0Y2Q5Ny4uNGNkZDhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyk7CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJGZW5jZSBmYWlsZWQgdG8gZ2V0IGEgc2NyYXRjaCByZWdpc3Rlci4iKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmZW5jZSBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnaXN0ZXJcbiIpOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJCXJldHVybiByOwogCX0KQEAgLTMzNSw5ICszMzUsMTAgQEAKIAlJTklUX0xJU1RfSEVBRCgmcmRldi0+ZmVuY2VfZHJ2LnNpZ25hbGVkKTsKIAlyZGV2LT5mZW5jZV9kcnYuY291bnRfdGltZW91dCA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcmRldi0+ZmVuY2VfZHJ2LnF1ZXVlKTsKKwlyZGV2LT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQgPSB0cnVlOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAlpZiAocmFkZW9uX2RlYnVnZnNfZmVuY2VfaW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIGZlbmNlICFcbiIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZlbmNlIGRlYnVnZnMgZmlsZSBjcmVhdGlvbiBmYWlsZWRcbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM0NiwxMSArMzQ3LDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKKwlpZiAoIXJkZXYtPmZlbmNlX2Rydi5pbml0aWFsaXplZCkKKwkJcmV0dXJuOwogCXdha2VfdXBfYWxsKCZyZGV2LT5mZW5jZV9kcnYucXVldWUpOwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCByZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKLQlEUk1fSU5GTygicmFkZW9uOiBmZW5jZSBmaW5hbGl6ZWRcbiIpOworCXJkZXYtPmZlbmNlX2Rydi5pbml0aWFsaXplZCA9IGZhbHNlOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCmluZGV4IGExYmYxMWQuLjQ4YjdjZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYwpAQCAtOTIsOCArOTIsNyBAQAogCQkJICAmaW5pdC0+Z2FydF90ZXh0dXJlc19vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NQX0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbGVhcjMyIHsKQEAgLTEyNSw4ICsxMjQsNyBAQAogCQkJICAmY2xyLT5kZXB0aF9ib3hlcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQ0xFQVIsICh1bnNpZ25lZCBsb25nKWNscik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZyljbHIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N0aXBwbGUzMiB7CkBAIC0xNDksOCArMTQ3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXhfaW1hZ2UzMiB7CkBAIC0yMDQsOCArMjAxLDcgQEAKIAkJCSAgJmltYWdlLT5kYXRhKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fVEVYVFVSRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdmVydGV4Ml8zMiB7CkBAIC0yMzgsOCArMjM0LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnByaW0pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1ZFUlRFWDIsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbWRfYnVmZmVyMzIgewpAQCAtMjY4LDggKzI2Myw3IEBACiAJCQkgICZyZXF1ZXN0LT5ib3hlcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQ01EQlVGLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQ01EQlVGLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9nZXRwYXJhbTMyIHsKQEAgLTI5Myw4ICsyODcsNyBAQAogCQkJICAmcmVxdWVzdC0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX21lbV9hbGxvYzMyIHsKQEAgLTMyMiw4ICszMTUsNyBAQAogCQkJICAmcmVxdWVzdC0+cmVnaW9uX29mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25faXJxX2VtaXQzMiB7CkBAIC0zNDUsOCArMzM3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmlycV9zZXEpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fSVJRX0VNSVQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiAvKiBUaGUgdHdvIDY0LWJpdCBhcmNoZXMgd2hlcmUgYWxpZ25vZih1NjQpPT00IGluIDMyLWJpdCBjb2RlICovCkBAIC0zNzIsOCArMzYzLDcgQEAKIAkJCSAgJnJlcXVlc3QtPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fU0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fU0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKIH0KICNlbHNlCiAjZGVmaW5lIGNvbXBhdF9yYWRlb25fY3Bfc2V0cGFyYW0gTlVMTApAQCAtNDEzLDEyICs0MDMsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUocmFkZW9uX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IHJhZGVvbl9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQzMSw5ICs0MTksNyBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UpCiAJCXJldHVybiBkcm1fY29tcGF0X2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAotCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwotCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKaW5kZXggYjgyZWRlOS4uY2MyNzQ4NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQzLDggKzQzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTA1OSw3ICsxMDU4LDcgQEAKIAlyYWRlb25fc2V0X3BsbChjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAlyYWRlb25fb3ZlcnNjYW5fc2V0dXAoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKLQkJcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoY3J0YywgbW9kZSwgYWRqdXN0ZWRfbW9kZSk7CisJCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIGFkanVzdGVkX21vZGUpOwogCX0gZWxzZSB7CiAJCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gUk1YX09GRikgewogCQkJLyogRklYTUU6IG9ubHkgZmlyc3QgY3J0YyBoYXMgcm14IHdoYXQgc2hvdWxkIHdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCmluZGV4IGRmMDA1MTUuLjk4MTUwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCkBAIC0yMDcsNiArMjA3LDggQEAKIAkJKmFkanVzdGVkX21vZGUgPSAqbmF0aXZlX21vZGU7CiAJCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gbW9kZS0+aGRpc3BsYXk7CiAJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CisJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSA9IG1vZGUtPnZkaXNwbGF5OwogCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCAzZGNiZTEzLi40MDIzNjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC04OCw2ICs4OCw3IEBACiAJVFZfU1REX1NDQVJUX1BBTCwKIAlUVl9TVERfU0VDQU0sCiAJVFZfU1REX1BBTF9DTiwKKwlUVl9TVERfUEFMX04sCiB9OwogCiAvKiByYWRlb24gZ3Bpby1iYXNlZCBpMmMKQEAgLTM5NSw2ICszOTYsMTEgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIH07CiAKK2V4dGVybiBlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKIGV4dGVybiB2b2lkIHJhZGVvbl9jb25uZWN0b3JfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIGV4dGVybiBib29sIHJhZGVvbl9kcF9uZWVkc19saW5rX3RyYWluKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RwX21vZGVfdmFsaWRfaGVscGVyKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDM5MWM5NzMuLjlmNWUyZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKQEAgLTQyLDggKzQyLDggQEAKIAkvKiBOdW1iZXIgb2YgdGVzdHMgPQogCSAqIChUb3RhbCBHVFQgLSBJQiBwb29sIC0gd3JpdGViYWNrIHBhZ2UgLSByaW5nIGJ1ZmZlcikgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQotCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSAvIHNpemU7CisJbiA9ICgodTMyKShyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KKwkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkpIC8gc2l6ZTsKIAogCWd0dF9vYmogPSBremFsbG9jKG4gKiBzaXplb2YoKmd0dF9vYmopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWd0dF9vYmopIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggZDdmZDE2MC4uM2IwYzA3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTQ5NCw2ICs0OTQsNyBAQAogCQlEUk1fRVJST1IoImZhaWxlZCBpbml0aWFsaXppbmcgYnVmZmVyIG9iamVjdCBkcml2ZXIoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KKwlyZGV2LT5tbWFuLmluaXRpYWxpemVkID0gdHJ1ZTsKIAlyID0gdHRtX2JvX2luaXRfbW0oJnJkZXYtPm1tYW4uYmRldiwgVFRNX1BMX1ZSQU0sCiAJCQkJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPj4gUEFHRV9TSElGVCk7CiAJaWYgKHIpIHsKQEAgLTU0MSw2ICs1NDIsOCBAQAogewogCWludCByOwogCisJaWYgKCFyZGV2LT5tbWFuLmluaXRpYWxpemVkKQorCQlyZXR1cm47CiAJaWYgKHJkZXYtPnN0b2xsZW5fdmdhX21lbW9yeSkgewogCQlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+c3RvbGxlbl92Z2FfbWVtb3J5LCBmYWxzZSk7CiAJCWlmIChyID09IDApIHsKQEAgLTU1NCw2ICs1NTcsNyBAQAogCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmcmRldi0+bW1hbi5iZGV2KTsKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogCXJhZGVvbl90dG1fZ2xvYmFsX2ZpbmkocmRldik7CisJcmRldi0+bW1hbi5pbml0aWFsaXplZCA9IGZhbHNlOwogCURSTV9JTkZPKCJyYWRlb246IHR0bSBmaW5hbGl6ZWRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jCmluZGV4IGVlZTUyYWEuLjAyMWRlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jCkBAIC01MCw3ICs1MCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSBkcm1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMKaW5kZXggZTcyNWNjMC4uNGZkMWYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMKaW5kZXggMDEyZmYyZS4uZWM1YTQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGRmeC90ZGZ4X2Rydi5jCkBAIC00OCw3ICs0OCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSBkcm1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMKaW5kZXggYmMyZjUxOC4uN2ExYjIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vcGVuID0gZHJtX29wZW4sCiAJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKaW5kZXggN2I0OGJiMy4uMWRiMWVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKQEAgLTEwMywzNyArMTAzLDM5IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB2bXdfaW9jdGxzW10gPSB7Ci0JVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0dFVF9QQVJBTSwgdm13X2dldHBhcmFtX2lvY3RsLCAwKSwKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfR0VUX1BBUkFNLCB2bXdfZ2V0cGFyYW1faW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQUxMT0NfRE1BQlVGLCB2bXdfZG1hYnVmX2FsbG9jX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19VTlJFRl9ETUFCVUYsIHZtd19kbWFidWZfdW5yZWZfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0NVUlNPUl9CWVBBU1MsCi0JCSAgICAgIHZtd19rbXNfY3Vyc29yX2J5cGFzc19pb2N0bCwgMCksCisJCSAgICAgIHZtd19rbXNfY3Vyc29yX2J5cGFzc19pb2N0bCwKKwkJICAgICAgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XIHwgRFJNX1VOTE9DS0VEKSwKIAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DT05UUk9MX1NUUkVBTSwgdm13X292ZXJsYXlfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cgfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DTEFJTV9TVFJFQU0sIHZtd19zdHJlYW1fY2xhaW1faW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cgfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19VTlJFRl9TVFJFQU0sIHZtd19zdHJlYW1fdW5yZWZfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cgfCBEUk1fVU5MT0NLRUQpLAogCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0NSRUFURV9DT05URVhULCB2bXdfY29udGV4dF9kZWZpbmVfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX0NPTlRFWFQsIHZtd19jb250ZXh0X2Rlc3Ryb3lfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0NSRUFURV9TVVJGQUNFLCB2bXdfc3VyZmFjZV9kZWZpbmVfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX1NVUkZBQ0UsIHZtd19zdXJmYWNlX2Rlc3Ryb3lfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1JFRl9TVVJGQUNFLCB2bXdfc3VyZmFjZV9yZWZlcmVuY2VfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0VYRUNCVUYsIHZtd19leGVjYnVmX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19GSUZPX0RFQlVHLCB2bXdfZmlmb19kZWJ1Z19pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1JPT1RfT05MWSB8IERSTV9NQVNURVIgfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19GRU5DRV9XQUlULCB2bXdfZmVuY2Vfd2FpdF9pb2N0bCwKLQkJICAgICAgMCkKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm13X3BjaV9pZF9saXN0W10gPSB7CkBAIC00NjAsMTEgKzQ2Miw5IEBACiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKIAl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKLQlsb25nIHJldDsKIAogCS8qCi0JICogVGhlIGRyaXZlciBwcml2YXRlIGlvY3RscyBhbmQgVFRNIGlvY3RscyBzaG91bGQgYmUKLQkgKiB0aHJlYWQtc2FmZS4KKwkgKiBEbyBleHRyYSBjaGVja2luZyBvbiBkcml2ZXIgcHJpdmF0ZSBpb2N0bHMuCiAJICovCiAKIAlpZiAoKG5yID49IERSTV9DT01NQU5EX0JBU0UpICYmIChuciA8IERSTV9DT01NQU5EX0VORCkKQEAgLTQ3NywxOCArNDc3LDkgQEAKIAkJCQkgIG5yIC0gRFJNX0NPTU1BTkRfQkFTRSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlyZXR1cm4gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsCi0JCQkJIGZpbHAsIGNtZCwgYXJnKTsKIAl9CiAKLQkvKgotCSAqIE5vdCBhbGwgb2xkIGRybSBpb2N0bHMgYXJlIHRocmVhZC1zYWZlLgotCSAqLwotCi0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogfQogCiBzdGF0aWMgaW50IHZtd19maXJzdG9wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggNDM1NDZkMC4uZTYxYmQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogCXVpbnQzMl90IGxhc3RfY2lkOwogCWJvb2wgY2lkX3ZhbGlkOwogCXVpbnQzMl90IGxhc3Rfc2lkOworCXVpbnQzMl90IHNpZF90cmFuc2xhdGlvbjsKIAlib29sIHNpZF92YWxpZDsKIAlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZhbGlkYXRlX25vZGVzOwpAQCAtMzE3LDkgKzMxOCwxMCBAQAogZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgc3RydWN0IHZtd19zdXJmYWNlICpzcmYsCiAJCQkgICAgdm9pZCAoKnJlc19mcmVlKSAoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKSk7Ci1leHRlcm4gaW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQkJICAgaW50IHNpZCwgc3RydWN0IHZtd19zdXJmYWNlICoqb3V0KTsKK2V4dGVybiBpbnQgdm13X3VzZXJfc3VyZmFjZV9sb29rdXBfaGFuZGxlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkJCSAgdWludDMyX3QgaGFuZGxlLAorCQkJCQkgIHN0cnVjdCB2bXdfc3VyZmFjZSAqKm91dCk7CiBleHRlcm4gaW50IHZtd19zdXJmYWNlX2Rlc3Ryb3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgdm13X3N1cmZhY2VfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0zMjgsNyArMzMwLDcgQEAKIAkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJCSAgICAgaW50IGlkKTsKKwkJCSAgICAgdWludDMyX3QgaGFuZGxlLCBpbnQgKmlkKTsKIGV4dGVybiB2b2lkIHZtd19kbWFidWZfYm9fZnJlZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKIGV4dGVybiBpbnQgdm13X2RtYWJ1Zl9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYwppbmRleCA3YTM5ZjNlLi4yZTkyZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCkBAIC03MywyMSArNzMsMzIgQEAKIAogc3RhdGljIGludCB2bXdfY21kX3NpZF9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCi0JCQkgICAgIHVpbnQzMl90IHNpZCkKKwkJCSAgICAgdWludDMyX3QgKnNpZCkKIHsKLQlpZiAodW5saWtlbHkoKCFzd19jb250ZXh0LT5zaWRfdmFsaWQgfHwgc2lkICE9IHN3X2NvbnRleHQtPmxhc3Rfc2lkKSAmJgotCQkgICAgIHNpZCAhPSBTVkdBM0RfSU5WQUxJRF9JRCkpIHsKLQkJaW50IHJldCA9IHZtd19zdXJmYWNlX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LT50ZmlsZSwgc2lkKTsKKwlpZiAoKnNpZCA9PSBTVkdBM0RfSU5WQUxJRF9JRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoKCFzd19jb250ZXh0LT5zaWRfdmFsaWQgIHx8CisJCSAgICAgICpzaWQgIT0gc3dfY29udGV4dC0+bGFzdF9zaWQpKSkgeworCQlpbnQgcmVhbF9pZDsKKwkJaW50IHJldCA9IHZtd19zdXJmYWNlX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LT50ZmlsZSwKKwkJCQkJICAgICpzaWQsICZyZWFsX2lkKTsKIAogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCQlEUk1fRVJST1IoIkNvdWxkIG90IGZpbmQgb3IgdXNlIHN1cmZhY2UgJXVcbiIsCi0JCQkJICAodW5zaWduZWQpIHNpZCk7CisJCQlEUk1fRVJST1IoIkNvdWxkIG90IGZpbmQgb3IgdXNlIHN1cmZhY2UgMHglMDh4ICIKKwkJCQkgICJhZGRyZXNzIDB4JTA4bHhcbiIsCisJCQkJICAodW5zaWduZWQgaW50KSAqc2lkLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpIHNpZCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQkJc3dfY29udGV4dC0+bGFzdF9zaWQgPSBzaWQ7CisJCXN3X2NvbnRleHQtPmxhc3Rfc2lkID0gKnNpZDsKIAkJc3dfY29udGV4dC0+c2lkX3ZhbGlkID0gdHJ1ZTsKLQl9CisJCSpzaWQgPSByZWFsX2lkOworCQlzd19jb250ZXh0LT5zaWRfdHJhbnNsYXRpb24gPSByZWFsX2lkOworCX0gZWxzZQorCQkqc2lkID0gc3dfY29udGV4dC0+c2lkX3RyYW5zbGF0aW9uOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNyw3ICsxMTgsOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwotCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LnRhcmdldC5zaWQpOworCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnRhcmdldC5zaWQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2NtZF9zdXJmYWNlX2NvcHlfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTEyMSwxMCArMTMzLDEwIEBACiAJaW50IHJldDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKLQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LnNyYy5zaWQpOworCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNyYy5zaWQpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7Ci0JcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuZGVzdC5zaWQpOworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5kZXN0LnNpZCk7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2NtZF9zdHJldGNoX2JsdF9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTM4LDEwICsxNTAsMTAgQEAKIAlpbnQgcmV0OwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwotCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuc3JjLnNpZCk7CisJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuc3JjLnNpZCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5kZXN0LnNpZCk7CisJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LmRlc3Quc2lkKTsKIH0KIAogc3RhdGljIGludCB2bXdfY21kX2JsdF9zdXJmX3NjcmVlbl9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTU0LDcgKzE2Niw3IEBACiAJfSAqY21kOwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwotCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LnNyY0ltYWdlLnNpZCk7CisJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNyY0ltYWdlLnNpZCk7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2NtZF9wcmVzZW50X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xNjcsNyArMTc5LDcgQEAKIAl9ICpjbWQ7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7Ci0JcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuc2lkKTsKKwlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuc2lkKTsKIH0KIAogc3RhdGljIGludCB2bXdfY21kX2RtYShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTg3LDEyICsxOTksNyBAQAogCXVpbnQzMl90IGN1cl92YWxpZGF0ZV9ub2RlOwogCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmOwogCi0KIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2RtYV9jbWQsIGhlYWRlcik7Ci0JcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+ZG1hLmhvc3Quc2lkKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCiAJaGFuZGxlID0gY21kLT5kbWEuZ3Vlc3QucHRyLmdtcklkOwogCXJldCA9IHZtd191c2VyX2RtYWJ1Zl9sb29rdXAoc3dfY29udGV4dC0+dGZpbGUsIGhhbmRsZSwgJnZtd19ibyk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewpAQCAtMjI4LDE0ICsyMzUsMjMgQEAKIAkJKytzd19jb250ZXh0LT5jdXJfdmFsX2J1ZjsKIAl9CiAKLQlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cChkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCi0JCQkJICAgICAgY21kLT5kbWEuaG9zdC5zaWQsICZzcmYpOworCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCisJCQkJCSAgICAgY21kLT5kbWEuaG9zdC5zaWQsICZzcmYpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzdXJmYWNlXG4iKTsKIAkJZ290byBvdXRfbm9fcmVsb2M7CiAJfQogCisJLyoqCisJICogUGF0Y2ggY29tbWFuZCBzdHJlYW0gd2l0aCBkZXZpY2UgU0lELgorCSAqLworCisJY21kLT5kbWEuaG9zdC5zaWQgPSBzcmYtPnJlcy5pZDsKIAl2bXdfa21zX2N1cnNvcl9zbm9vcChzcmYsIHN3X2NvbnRleHQtPnRmaWxlLCBibywgaGVhZGVyKTsKKwkvKioKKwkgKiBGSVhNRTogTWF5IGRlYWRsb2NrIGhlcmUgd2hlbiBjYWxsZWQgZnJvbSB0aGUKKwkgKiBjb21tYW5kIHBhcnNpbmcgY29kZS4KKwkgKi8KIAl2bXdfc3VyZmFjZV91bnJlZmVyZW5jZSgmc3JmKTsKIAogb3V0X25vX3JlbG9jOgpAQCAtMjQzLDYgKzI1OSw5MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdm13X2NtZF9kcmF3KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQlTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2RyYXdfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRHJhd1ByaW1pdGl2ZXMgYm9keTsKKwl9ICpjbWQ7CisJU1ZHQTNkVmVydGV4RGVjbCAqZGVjbCA9IChTVkdBM2RWZXJ0ZXhEZWNsICopKAorCQkodW5zaWduZWQgbG9uZyloZWFkZXIgKyBzaXplb2YoKmNtZCkpOworCVNWR0EzZFByaW1pdGl2ZVJhbmdlICpyYW5nZTsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IG1heG51bTsKKwlpbnQgcmV0OworCisJcmV0ID0gdm13X2NtZF9jaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGhlYWRlcik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfZHJhd19jbWQsIGhlYWRlcik7CisJbWF4bnVtID0gKGhlYWRlci0+c2l6ZSAtIHNpemVvZihjbWQtPmJvZHkpKSAvIHNpemVvZigqZGVjbCk7CisKKwlpZiAodW5saWtlbHkoY21kLT5ib2R5Lm51bVZlcnRleERlY2xzID4gbWF4bnVtKSkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgbnVtYmVyIG9mIHZlcnRleCBkZWNsYXJhdGlvbnMuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Ym9keS5udW1WZXJ0ZXhEZWNsczsgKytpLCArK2RlY2wpIHsKKwkJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJCSZkZWNsLT5hcnJheS5zdXJmYWNlSWQpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwltYXhudW0gPSAoaGVhZGVyLT5zaXplIC0gc2l6ZW9mKGNtZC0+Ym9keSkgLQorCQkgIGNtZC0+Ym9keS5udW1WZXJ0ZXhEZWNscyAqIHNpemVvZigqZGVjbCkpIC8gc2l6ZW9mKCpyYW5nZSk7CisJaWYgKHVubGlrZWx5KGNtZC0+Ym9keS5udW1SYW5nZXMgPiBtYXhudW0pKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBudW1iZXIgb2YgaW5kZXggcmFuZ2VzLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJhbmdlID0gKFNWR0EzZFByaW1pdGl2ZVJhbmdlICopIGRlY2w7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Ym9keS5udW1SYW5nZXM7ICsraSwgKytyYW5nZSkgeworCQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwKKwkJCQkJJnJhbmdlLT5pbmRleEFycmF5LnN1cmZhY2VJZCk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZtd19jbWRfdGV4X3N0YXRlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCSAgICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd190ZXhfc3RhdGVfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU2V0VGV4dHVyZVN0YXRlIHN0YXRlOworCX07CisKKwlTVkdBM2RUZXh0dXJlU3RhdGUgKmxhc3Rfc3RhdGUgPSAoU1ZHQTNkVGV4dHVyZVN0YXRlICopCisJICAoKHVuc2lnbmVkIGxvbmcpIGhlYWRlciArIGhlYWRlci0+c2l6ZSArIHNpemVvZihoZWFkZXIpKTsKKwlTVkdBM2RUZXh0dXJlU3RhdGUgKmN1cl9zdGF0ZSA9IChTVkdBM2RUZXh0dXJlU3RhdGUgKikKKwkJKCh1bnNpZ25lZCBsb25nKSBoZWFkZXIgKyBzaXplb2Yoc3RydWN0IHZtd190ZXhfc3RhdGVfY21kKSk7CisJaW50IHJldDsKKworCXJldCA9IHZtd19jbWRfY2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBoZWFkZXIpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKDsgY3VyX3N0YXRlIDwgbGFzdF9zdGF0ZTsgKytjdXJfc3RhdGUpIHsKKwkJaWYgKGxpa2VseShjdXJfc3RhdGUtPm5hbWUgIT0gU1ZHQTNEX1RTX0JJTkRfVEVYVFVSRSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwKKwkJCQkJJmN1cl9zdGF0ZS0+dmFsdWUpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogCiB0eXBlZGVmIGludCAoKnZtd19jbWRfZnVuYykgKHN0cnVjdCB2bXdfcHJpdmF0ZSAqLAogCQkJICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKiwKQEAgLTI2NCw3ICszNjQsNyBAQAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFJFTkRFUlNUQVRFLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFJFTkRFUlRBUkdFVCwKIAkJICAgICZ2bXdfY21kX3NldF9yZW5kZXJfdGFyZ2V0X2NoZWNrKSwKLQlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRURVhUVVJFU1RBVEUsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVEVYVFVSRVNUQVRFLCAmdm13X2NtZF90ZXhfc3RhdGUpLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVE1BVEVSSUFMLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVExJR0hUREFUQSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRMSUdIVEVOQUJMRUQsICZ2bXdfY21kX2NpZF9jaGVjayksCkBAIC0yNzYsNyArMzc2LDcgQEAKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TSEFERVJfREVTVFJPWSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRfU0hBREVSLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVF9TSEFERVJfQ09OU1QsICZ2bXdfY21kX2NpZF9jaGVjayksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFJBV19QUklNSVRJVkVTLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUywgJnZtd19jbWRfZHJhdyksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUU0NJU1NPUlJFQ1QsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfQkVHSU5fUVVFUlksICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRU5EX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLApAQCAtMjkxLDYgKzM5MSw3IEBACiAJCQkgdm9pZCAqYnVmLCB1aW50MzJfdCAqc2l6ZSkKIHsKIAl1aW50MzJfdCBjbWRfaWQ7CisJdWludDMyX3Qgc2l6ZV9yZW1haW5pbmcgPSAqc2l6ZTsKIAlTVkdBM2RDbWRIZWFkZXIgKmhlYWRlciA9IChTVkdBM2RDbWRIZWFkZXIgKikgYnVmOwogCWludCByZXQ7CiAKQEAgLTMwNCw2ICs0MDUsOSBAQAogCSpzaXplID0gbGUzMl90b19jcHUoaGVhZGVyLT5zaXplKSArIHNpemVvZihTVkdBM2RDbWRIZWFkZXIpOwogCiAJY21kX2lkIC09IFNWR0FfM0RfQ01EX0JBU0U7CisJaWYgKHVubGlrZWx5KCpzaXplID4gc2l6ZV9yZW1haW5pbmcpKQorCQlnb3RvIG91dF9lcnI7CisKIAlpZiAodW5saWtlbHkoY21kX2lkID49IFNWR0FfM0RfQ01EX01BWCAtIFNWR0FfM0RfQ01EX0JBU0UpKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTMyNiw2ICs0MzAsNyBAQAogCWludCByZXQ7CiAKIAl3aGlsZSAoY3VyX3NpemUgPiAwKSB7CisJCXNpemUgPSBjdXJfc2l6ZTsKIAkJcmV0ID0gdm13X2NtZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgYnVmLCAmc2l6ZSk7CiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzg2LDcgKzQ5MSw3IEBACiAJCXJldHVybiAwOwogCiAJcmV0ID0gdm13X2dtcl9iaW5kKGRldl9wcml2LCBibyk7Ci0JaWYgKGxpa2VseShyZXQgPT0gMCB8fCByZXQgPT0gLUVSRVNUQVJUKSkKKwlpZiAobGlrZWx5KHJldCA9PSAwIHx8IHJldCA9PSAtRVJFU1RBUlRTWVMpKQogCQlyZXR1cm4gcmV0OwogCiAKQEAgLTQyOSw3ICs1MzQsNyBAQAogCiAJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCXJldCA9IC1FUkVTVEFSVDsKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIG91dF9ub19jbWRfbXV0ZXg7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKaW5kZXggNzZiMDY5My4uMDFmZWI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJCX0KIAkJc2NoZWR1bGVfdGltZW91dCgxKTsKIAkJaWYgKGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldCA9IC1FUkVTVEFSVDsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjM3LDkgKzIzNyw3IEBACiAJCSAgICAoZGV2X3ByaXYtPmZpZm9fcXVldWUsCiAJCSAgICAgIXZtd19maWZvX2lzX2Z1bGwoZGV2X3ByaXYsIGJ5dGVzKSwgdGltZW91dCk7CiAKLQlpZiAodW5saWtlbHkocmV0ID09IC1FUkVTVEFSVFNZUykpCi0JCXJldCA9IC1FUkVTVEFSVDsKLQllbHNlIGlmICh1bmxpa2VseShyZXQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKIAkJcmV0ID0gLUVCVVNZOwogCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKIAkJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMKaW5kZXggOWUwZjAzMC4uZDQwMDg2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQkJCQkgICAgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQl9CiAJCWlmIChpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRVJFU1RBUlQ7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIxOCw5ICsyMTgsNyBAQAogCQkgICAgIHZtd19mZW5jZV9zaWduYWxlZChkZXZfcHJpdiwgc2VxdWVuY2UpLAogCQkgICAgIHRpbWVvdXQpOwogCi0JaWYgKHVubGlrZWx5KHJldCA9PSAtRVJFU1RBUlRTWVMpKQotCQlyZXQgPSAtRVJFU1RBUlQ7Ci0JZWxzZSBpZiAodW5saWtlbHkocmV0ID09IDApKQorCWlmICh1bmxpa2VseShyZXQgPT0gMCkpCiAJCXJldCA9IC1FQlVTWTsKIAllbHNlIGlmIChsaWtlbHkocmV0ID4gMCkpCiAJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCmluZGV4IGU5NDAzYmUuLmIxYWY3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCkBAIC0xMDYsOCArMTA2LDggQEAKIAlpbnQgcmV0OwogCiAJaWYgKGhhbmRsZSkgewotCQlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cChkZXZfcHJpdiwgdGZpbGUsCi0JCQkJCSAgICAgIGhhbmRsZSwgJnN1cmZhY2UpOworCQlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cF9oYW5kbGUoZGV2X3ByaXYsIHRmaWxlLAorCQkJCQkJICAgICBoYW5kbGUsICZzdXJmYWNlKTsKIAkJaWYgKCFyZXQpIHsKIAkJCWlmICghc3VyZmFjZS0+c25vb3Blci5pbWFnZSkgewogCQkJCURSTV9FUlJPUigic3VyZmFjZSBub3Qgc3VpdGFibGUgZm9yIGN1cnNvclxuIik7CkBAIC03MDQsOCArNzA0LDggQEAKIAlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJvID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXAoZGV2X3ByaXYsIHRmaWxlLAotCQkJCSAgICAgIG1vZGVfY21kLT5oYW5kbGUsICZzdXJmYWNlKTsKKwlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cF9oYW5kbGUoZGV2X3ByaXYsIHRmaWxlLAorCQkJCQkgICAgIG1vZGVfY21kLT5oYW5kbGUsICZzdXJmYWNlKTsKIAlpZiAocmV0KQogCQlnb3RvIHRyeV9kbWFidWY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCmluZGV4IGExY2VlZDAuLmMwMTJkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwpAQCAtNDg4LDI4ICs0ODgsNDQgQEAKIAlrZnJlZSh1c2VyX3NyZik7CiB9CiAKLWludCB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJICAgIGludCBzaWQsIHN0cnVjdCB2bXdfc3VyZmFjZSAqKm91dCkKK2ludCB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cF9oYW5kbGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCQkgICB1aW50MzJfdCBoYW5kbGUsIHN0cnVjdCB2bXdfc3VyZmFjZSAqKm91dCkKIHsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CiAJc3RydWN0IHZtd19zdXJmYWNlICpzcmY7CiAJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlyZXMgPSB2bXdfcmVzb3VyY2VfbG9va3VwKGRldl9wcml2LCAmZGV2X3ByaXYtPnN1cmZhY2VfaWRyLCBzaWQpOwotCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpCisJYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZpbGUsIGhhbmRsZSk7CisJaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N1cmZhY2VfZnJlZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHVubGlrZWx5KGJhc2UtPm9iamVjdF90eXBlICE9IFZNV19SRVNfU1VSRkFDRSkpCisJCWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKIAotCXNyZiA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3VyZmFjZSwgcmVzKTsKLQl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihzcmYsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBzcmYpOwotCWlmICh1c2VyX3NyZi0+YmFzZS50ZmlsZSAhPSB0ZmlsZSAmJiAhdXNlcl9zcmYtPmJhc2Uuc2hhcmVhYmxlKQotCQlyZXR1cm4gLUVQRVJNOworCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBiYXNlKTsKKwlzcmYgPSAmdXNlcl9zcmYtPnNyZjsKKwlyZXMgPSAmc3JmLT5yZXM7CisKKwlyZWFkX2xvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKKworCWlmICghcmVzLT5hdmFpbCB8fCByZXMtPnJlc19mcmVlICE9ICZ2bXdfdXNlcl9zdXJmYWNlX2ZyZWUpIHsKKwkJcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKKwkJZ290byBvdXRfYmFkX3Jlc291cmNlOworCX0KKworCWtyZWZfZ2V0KCZyZXMtPmtyZWYpOworCXJlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CiAKIAkqb3V0ID0gc3JmOwotCXJldHVybiAwOworCXJldCA9IDA7CisKK291dF9iYWRfcmVzb3VyY2U6CisJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHZtd191c2VyX3N1cmZhY2VfYmFzZV9yZWxlYXNlKHN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKipwX2Jhc2UpCkBAIC01MjYsMzUgKzU0MiwxMCBAQAogaW50IHZtd19zdXJmYWNlX2Rlc3Ryb3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOwotCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKLQlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CiAJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgKmFyZyA9IChzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyAqKWRhdGE7CiAJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7Ci0JaW50IHJldCA9IDA7CiAKLQlyZXMgPSB2bXdfcmVzb3VyY2VfbG9va3VwKGRldl9wcml2LCAmZGV2X3ByaXYtPnN1cmZhY2VfaWRyLCBhcmctPnNpZCk7Ci0JaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVzLT5yZXNfZnJlZSAhPSAmdm13X3VzZXJfc3VyZmFjZV9mcmVlKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNyZiA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3VyZmFjZSwgcmVzKTsKLQl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihzcmYsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBzcmYpOwotCWlmICh1c2VyX3NyZi0+YmFzZS50ZmlsZSAhPSB0ZmlsZSAmJiAhdXNlcl9zcmYtPmJhc2Uuc2hhcmVhYmxlKSB7Ci0JCXJldCA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgdXNlcl9zcmYtPmJhc2UuaGFzaC5rZXksCi0JCQkJICBUVE1fUkVGX1VTQUdFKTsKLW91dDoKLQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgYXJnLT5zaWQsIFRUTV9SRUZfVVNBR0UpOwogfQogCiBpbnQgdm13X3N1cmZhY2VfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC02NDksNyArNjQwLDEwIEBACiAJfQogCXNyZi0+c25vb3Blci5jcnRjID0gTlVMTDsKIAotCXJlcC0+c2lkID0gcmVzLT5pZDsKKwlyZXAtPnNpZCA9IHVzZXJfc3JmLT5iYXNlLmhhc2gua2V5OworCWlmIChyZXAtPnNpZCA9PSBTVkdBM0RfSU5WQUxJRF9JRCkKKwkJRFJNX0VSUk9SKCJDcmVhdGVkIGJhZCBTdXJmYWNlIElELlxuIik7CisKIAl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CiAJcmV0dXJuIDA7CiBvdXRfZXJyMToKQEAgLTY2MiwzOSArNjU2LDMzIEBACiBpbnQgdm13X3N1cmZhY2VfcmVmZXJlbmNlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0Jc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CiAJdW5pb24gZHJtX3Ztd19zdXJmYWNlX3JlZmVyZW5jZV9hcmcgKmFyZyA9CiAJICAgICh1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZyAqKWRhdGE7CiAJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgKnJlcSA9ICZhcmctPnJlcTsKIAlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgKnJlcCA9ICZhcmctPnJlcDsKIAlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKLQlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CiAJc3RydWN0IHZtd19zdXJmYWNlICpzcmY7CiAJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOwogCXN0cnVjdCBkcm1fdm13X3NpemUgX191c2VyICp1c2VyX3NpemVzOwotCWludCByZXQ7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJlcyA9IHZtd19yZXNvdXJjZV9sb29rdXAoZGV2X3ByaXYsICZkZXZfcHJpdi0+c3VyZmFjZV9pZHIsIHJlcS0+c2lkKTsKLQlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQorCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCByZXEtPnNpZCk7CisJaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBzdXJmYWNlIHRvIHJlZmVyZW5jZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChyZXMtPnJlc19mcmVlICE9ICZ2bXdfdXNlcl9zdXJmYWNlX2ZyZWUpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CiAJfQogCi0Jc3JmID0gY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd19zdXJmYWNlLCByZXMpOwotCXVzZXJfc3JmID0gY29udGFpbmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7Ci0JaWYgKHVzZXJfc3JmLT5iYXNlLnRmaWxlICE9IHRmaWxlICYmICF1c2VyX3NyZi0+YmFzZS5zaGFyZWFibGUpIHsKLQkJRFJNX0VSUk9SKCJUcmllZCB0byByZWZlcmVuY2Ugbm9uZSBzaGFyZWFibGUgc3VyZmFjZVxuIik7Ci0JCXJldCA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSBWTVdfUkVTX1NVUkZBQ0UpKQorCQlnb3RvIG91dF9iYWRfcmVzb3VyY2U7CisKKwl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgYmFzZSk7CisJc3JmID0gJnVzZXJfc3JmLT5zcmY7CiAKIAlyZXQgPSB0dG1fcmVmX29iamVjdF9hZGQodGZpbGUsICZ1c2VyX3NyZi0+YmFzZSwgVFRNX1JFRl9VU0FHRSwgTlVMTCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBhZGQgYSByZWZlcmVuY2UgdG8gYSBzdXJmYWNlLlxuIik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9ub19yZWZlcmVuY2U7CiAJfQogCiAJcmVwLT5mbGFncyA9IHNyZi0+ZmxhZ3M7CkBAIC03MDYsNDAgKzY5NCw0MyBAQAogCWlmICh1c2VyX3NpemVzKQogCQlyZXQgPSBjb3B5X3RvX3VzZXIodXNlcl9zaXplcywgc3JmLT5zaXplcywKIAkJCQkgICBzcmYtPm51bV9zaXplcyAqIHNpemVvZigqc3JmLT5zaXplcykpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlciBmYWlsZWQgJXAgJXVcbiIsCiAJCQkgIHVzZXJfc2l6ZXMsIHNyZi0+bnVtX3NpemVzKTsKLQkJLyoqCi0JCSAqIEZJWE1FOiBVbnJlZmVyZW5jZSBzdXJmYWNlIGhlcmU/Ci0JCSAqLwotCQlnb3RvIG91dDsKLQl9Ci1vdXQ6Ci0Jdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworb3V0X2JhZF9yZXNvdXJjZToKK291dF9ub19yZWZlcmVuY2U6CisJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKIGludCB2bXdfc3VyZmFjZV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJICAgICAgaW50IGlkKQorCQkgICAgICB1aW50MzJfdCBoYW5kbGUsIGludCAqaWQpCiB7Ci0Jc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOwotCWludCByZXQgPSAwOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7CisJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOwogCi0JcmVhZF9sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7Ci0JcmVzID0gaWRyX2ZpbmQoJmRldl9wcml2LT5zdXJmYWNlX2lkciwgaWQpOwotCWlmIChyZXMgJiYgcmVzLT5hdmFpbCkgewotCQlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9Ci0JCQljb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3N1cmZhY2UsIHJlcyk7Ci0JCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c3JmID0KLQkJCWNvbnRhaW5lcl9vZihzcmYsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBzcmYpOworCWludCByZXQgPSAtRVBFUk07CiAKLQkJaWYgKHVzcmYtPmJhc2UudGZpbGUgIT0gdGZpbGUgJiYgIXVzcmYtPmJhc2Uuc2hhcmVhYmxlKQotCQkJcmV0ID0gLUVQRVJNOwotCX0gZWxzZQotCQlyZXQgPSAtRUlOVkFMOwotCXJlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZpbGUsIGhhbmRsZSk7CisJaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHVubGlrZWx5KGJhc2UtPm9iamVjdF90eXBlICE9IFZNV19SRVNfU1VSRkFDRSkpCisJCWdvdG8gb3V0X2JhZF9zdXJmYWNlOworCisJdXNlcl9zcmYgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIGJhc2UpOworCSppZCA9IHVzZXJfc3JmLT5zcmYucmVzLmlkOworCXJldCA9IDA7CisKK291dF9iYWRfc3VyZmFjZToKKwkvKioKKwkgKiBGSVhNRTogTWF5IGRlYWRsb2NrIGhlcmUgd2hlbiBjYWxsZWQgZnJvbSB0aGUKKwkgKiBjb21tYW5kIHBhcnNpbmcgY29kZS4KKwkgKi8KKworCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1iZmluLXR3aS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1iZmluLXR3aS5jCmluZGV4IGIzMDlhYzIuLmZlM2ZiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWJmaW4tdHdpLmMKQEAgLTY5MywxMyArNjkzLDEzIEBACiAJfQogCiAJLyogU2V0IFRXSSBpbnRlcm5hbCBjbG9jayBhcyAxME1IeiAqLwotCXdyaXRlX0NPTlRST0woaWZhY2UsICgoZ2V0X3NjbGsoKSAvIDEwMjQgLyAxMDI0ICsgNSkgLyAxMCkgJiAweDdGKTsKKwl3cml0ZV9DT05UUk9MKGlmYWNlLCAoKGdldF9zY2xrKCkgLyAxMDAwIC8gMTAwMCArIDUpIC8gMTApICYgMHg3Rik7CiAKIAkvKgogCSAqIFdlIHdpbGwgbm90IGVuZCB1cCB3aXRoIGEgQ0xLRElWPTAgYmVjYXVzZSBubyBvbmUgd2lsbCBzcGVjaWZ5Ci0JICogMjBrSHogU0NMIG9yIGxlc3MgaW4gS2NvbmZpZyBub3cuICg1ICogMTAyNCAvIDIwID0gMHgxMDApCisJICogMjBrSHogU0NMIG9yIGxlc3MgaW4gS2NvbmZpZyBub3cuICg1ICogMTAwMCAvIDIwID0gMjUwKQogCSAqLwotCWNsa2hpbG93ID0gNSAqIDEwMjQgLyBDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haOworCWNsa2hpbG93ID0gKCgxMCAqIDEwMDAgLyBDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haKSArIDEpIC8gMjsKIAogCS8qIFNldCBUd2kgaW50ZXJmYWNlIGNsb2NrIGFzIHNwZWNpZmllZCAqLwogCXdyaXRlX0NMS0RJVihpZmFjZSwgKGNsa2hpbG93IDw8IDgpIHwgY2xraGlsb3cpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCA3NWJmM2FkLi4wMDM3ZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtMjQ3LDcgKzI0NywxMyBAQAogCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCBPTUFQX0kyQ19DT05fRU4pOwogCX0KIAlkZXYtPmlkbGUgPSAwOwotCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0lFX1JFRywgZGV2LT5pZXN0YXRlKTsKKworCS8qCisJICogRG9uJ3Qgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBpZiB0aGUgSUUgc3RhdGUgaXMgMCBhcyBpdCBjYW4KKwkgKiBjYXVzZSBkZWFkbG9jay4KKwkgKi8KKwlpZiAoZGV2LT5pZXN0YXRlKQorCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcsIGRldi0+aWVzdGF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfaTJjX2lkbGUoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQpAQCAtMjgwLDYgKzI4NiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgaW50ZXJuYWxfY2xrID0gMDsKIAogCWlmIChkZXYtPnJldiA+PSBPTUFQX0kyQ19SRVZfMikgeworCQkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyIGJlZm9yZSBzb2Z0IHJlc2V0ICovCisJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0NPTl9SRUcsCisJCQlvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX0NPTl9SRUcpICYKKwkJCQl+KE9NQVBfSTJDX0NPTl9FTikpOworCiAJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX1NZU0NfUkVHLCBTWVNDX1NPRlRSRVNFVF9NQVNLKTsKIAkJLyogRm9yIHNvbWUgcmVhc29uIHdlIG5lZWQgdG8gc2V0IHRoZSBFTiBiaXQgYmVmb3JlIHRoZQogCQkgKiByZXNldCBkb25lIGJpdCBnZXRzIHNldC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKaW5kZXggYmZkMDNiZi4uZjNkNDQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKICNpbmNsdWRlICJ0M19jcGwuaCIKICNpbmNsdWRlICJ0M2NkZXYuaCIKQEAgLTc1LDEzICs3NiwxMyBAQAogfTsKIAogc3RydWN0IGN4aW9faGFsX3Jlc291cmNlIHsKLQlzdHJ1Y3Qga2ZpZm8gKnRwdF9maWZvOworCXN0cnVjdCBrZmlmbyB0cHRfZmlmbzsKIAlzcGlubG9ja190IHRwdF9maWZvX2xvY2s7Ci0Jc3RydWN0IGtmaWZvICpxcGlkX2ZpZm87CisJc3RydWN0IGtmaWZvIHFwaWRfZmlmbzsKIAlzcGlubG9ja190IHFwaWRfZmlmb19sb2NrOwotCXN0cnVjdCBrZmlmbyAqY3FpZF9maWZvOworCXN0cnVjdCBrZmlmbyBjcWlkX2ZpZm87CiAJc3BpbmxvY2tfdCBjcWlkX2ZpZm9fbG9jazsKLQlzdHJ1Y3Qga2ZpZm8gKnBkaWRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gcGRpZF9maWZvOwogCXNwaW5sb2NrX3QgcGRpZF9maWZvX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYwppbmRleCBiZDIzM2MwLi4zMWY5MjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKQEAgLTM5LDEyICszOSwxMiBAQAogI2luY2x1ZGUgImN4aW9fcmVzb3VyY2UuaCIKICNpbmNsdWRlICJjeGlvX2hhbC5oIgogCi1zdGF0aWMgc3RydWN0IGtmaWZvICpyaGRsX2ZpZm87CitzdGF0aWMgc3RydWN0IGtmaWZvIHJoZGxfZmlmbzsKIHN0YXRpYyBzcGlubG9ja190IHJoZGxfZmlmb19sb2NrOwogCiAjZGVmaW5lIFJBTkRPTV9TSVpFIDE2CiAKLXN0YXRpYyBpbnQgX19jeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhzdHJ1Y3Qga2ZpZm8gKipmaWZvLAorc3RhdGljIGludCBfX2N4aW9faW5pdF9yZXNvdXJjZV9maWZvKHN0cnVjdCBrZmlmbyAqZmlmbywKIAkJCQkgICBzcGlubG9ja190ICpmaWZvX2xvY2ssCiAJCQkJICAgdTMyIG5yLCB1MzIgc2tpcF9sb3csCiAJCQkJICAgdTMyIHNraXBfaGlnaCwKQEAgLTU1LDEyICs1NSwxMSBAQAogCXUzMiByYXJyYXlbMTZdOwogCXNwaW5fbG9ja19pbml0KGZpZm9fbG9jayk7CiAKLQkqZmlmbyA9IGtmaWZvX2FsbG9jKG5yICogc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwsIGZpZm9fbG9jayk7Ci0JaWYgKElTX0VSUigqZmlmbykpCisJaWYgKGtmaWZvX2FsbG9jKGZpZm8sIG5yICogc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2lwX2xvdyArIHNraXBfaGlnaDsgaSsrKQotCQlfX2tmaWZvX3B1dCgqZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSk7CisJCWtmaWZvX2luKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpOwogCWlmIChyYW5kb20pIHsKIAkJaiA9IDA7CiAJCXJhbmRvbV9ieXRlcyA9IHJhbmRvbTMyKCk7CkBAIC03MiwzMyArNzEsMzUgQEAKIAkJCQlyYW5kb21fYnl0ZXMgPSByYW5kb20zMigpOwogCQkJfQogCQkJaWR4ID0gKHJhbmRvbV9ieXRlcyA+PiAoaiAqIDIpKSAmIDB4RjsKLQkJCV9fa2ZpZm9fcHV0KCpmaWZvLAorCQkJa2ZpZm9faW4oZmlmbywKIAkJCQkodW5zaWduZWQgY2hhciAqKSAmcmFycmF5W2lkeF0sCiAJCQkJc2l6ZW9mKHUzMikpOwogCQkJcmFycmF5W2lkeF0gPSBpOwogCQkJaisrOwogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBSQU5ET01fU0laRTsgaSsrKQotCQkJX19rZmlmb19wdXQoKmZpZm8sCisJCQlrZmlmb19pbihmaWZvLAogCQkJCSh1bnNpZ25lZCBjaGFyICopICZyYXJyYXlbaV0sCiAJCQkJc2l6ZW9mKHUzMikpOwogCX0gZWxzZQogCQlmb3IgKGkgPSBza2lwX2xvdzsgaSA8IG5yIC0gc2tpcF9oaWdoOyBpKyspCi0JCQlfX2tmaWZvX3B1dCgqZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmksIHNpemVvZih1MzIpKTsKKwkJCWtmaWZvX2luKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZpLCBzaXplb2YodTMyKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2tpcF9sb3cgKyBza2lwX2hpZ2g7IGkrKykKLQkJa2ZpZm9fZ2V0KCpmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKTsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LAorCQkJCXNpemVvZih1MzIpLCBmaWZvX2xvY2spICE9IHNpemVvZih1MzIpKQorCQkJCQlicmVhazsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhzdHJ1Y3Qga2ZpZm8gKipmaWZvLCBzcGlubG9ja190ICogZmlmb19sb2NrLAorc3RhdGljIGludCBjeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHNwaW5sb2NrX3QgKiBmaWZvX2xvY2ssCiAJCQkJICAgdTMyIG5yLCB1MzIgc2tpcF9sb3csIHUzMiBza2lwX2hpZ2gpCiB7CiAJcmV0dXJuIChfX2N4aW9faW5pdF9yZXNvdXJjZV9maWZvKGZpZm8sIGZpZm9fbG9jaywgbnIsIHNraXBfbG93LAogCQkJCQkgIHNraXBfaGlnaCwgMCkpOwogfQogCi1zdGF0aWMgaW50IGN4aW9faW5pdF9yZXNvdXJjZV9maWZvX3JhbmRvbShzdHJ1Y3Qga2ZpZm8gKipmaWZvLAorc3RhdGljIGludCBjeGlvX2luaXRfcmVzb3VyY2VfZmlmb19yYW5kb20oc3RydWN0IGtmaWZvICpmaWZvLAogCQkJCSAgIHNwaW5sb2NrX3QgKiBmaWZvX2xvY2ssCiAJCQkJICAgdTMyIG5yLCB1MzIgc2tpcF9sb3csIHUzMiBza2lwX2hpZ2gpCiB7CkBAIC0xMTMsMTUgKzExNCwxMyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnJkZXZfcC0+cnNjcC0+cXBpZF9maWZvX2xvY2spOwogCi0JcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm8gPSBrZmlmb19hbGxvYyhUM19NQVhfTlVNX1FQICogc2l6ZW9mKHUzMiksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwsCi0JCQkJCSAgICAgICZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHJkZXZfcC0+cnNjcC0+cXBpZF9maWZvKSkKKwlpZiAoa2ZpZm9fYWxsb2MoJnJkZXZfcC0+cnNjcC0+cXBpZF9maWZvLCBUM19NQVhfTlVNX1FQICogc2l6ZW9mKHUzMiksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDE2OyBpIDwgVDNfTUFYX05VTV9RUDsgaSsrKQogCQlpZiAoIShpICYgcmRldl9wLT5xcG1hc2spKQotCQkJX19rZmlmb19wdXQocmRldl9wLT5yc2NwLT5xcGlkX2ZpZm8sCisJCQlrZmlmb19pbigmcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm8sCiAJCQkJICAgICh1bnNpZ25lZCBjaGFyICopICZpLCBzaXplb2YodTMyKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzQsNyArMTMzLDcgQEAKIAogdm9pZCBjeGlvX2hhbF9kZXN0cm95X3JoZGxfcmVzb3VyY2Uodm9pZCkKIHsKLQlrZmlmb19mcmVlKHJoZGxfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcmhkbF9maWZvKTsKIH0KIAogLyogbnJfKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KQEAgLTE2NywxMSArMTY2LDExIEBACiAJCWdvdG8gcGRpZF9lcnI7CiAJcmV0dXJuIDA7CiBwZGlkX2VycjoKLQlrZmlmb19mcmVlKHJzY3AtPmNxaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+Y3FpZF9maWZvKTsKIGNxaWRfZXJyOgotCWtmaWZvX2ZyZWUocnNjcC0+cXBpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5xcGlkX2ZpZm8pOwogcXBpZF9lcnI6Ci0Ja2ZpZm9fZnJlZShyc2NwLT50cHRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+dHB0X2ZpZm8pOwogdHB0X2VycjoKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTE3OSwzMyArMTc4LDM3IEBACiAvKgogICogcmV0dXJucyAwIGlmIG5vIHJlc291cmNlIGF2YWlsYWJsZQogICovCi1zdGF0aWMgdTMyIGN4aW9faGFsX2dldF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pCitzdGF0aWMgdTMyIGN4aW9faGFsX2dldF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHNwaW5sb2NrX3QgKiBsb2NrKQogewogCXUzMiBlbnRyeTsKLQlpZiAoa2ZpZm9fZ2V0KGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpKQorCWlmIChrZmlmb19vdXRfbG9ja2VkKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMiksIGxvY2spKQogCQlyZXR1cm4gZW50cnk7CiAJZWxzZQogCQlyZXR1cm4gMDsJLyogZmlmbyBlbXB0cnkgKi8KIH0KIAotc3RhdGljIHZvaWQgY3hpb19oYWxfcHV0X3Jlc291cmNlKHN0cnVjdCBrZmlmbyAqZmlmbywgdTMyIGVudHJ5KQorc3RhdGljIHZvaWQgY3hpb19oYWxfcHV0X3Jlc291cmNlKHN0cnVjdCBrZmlmbyAqZmlmbywgc3BpbmxvY2tfdCAqIGxvY2ssCisJCXUzMiBlbnRyeSkKIHsKLQlCVUdfT04oa2ZpZm9fcHV0KGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpID09IDApOworCUJVR19PTigKKwlrZmlmb19pbl9sb2NrZWQoZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSwgbG9jaykKKwk9PSAwKTsKIH0KIAogdTMyIGN4aW9faGFsX2dldF9zdGFnKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPnRwdF9maWZvKTsKKwlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKCZyc2NwLT50cHRfZmlmbywgJnJzY3AtPnRwdF9maWZvX2xvY2spOwogfQogCiB2b2lkIGN4aW9faGFsX3B1dF9zdGFnKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCwgdTMyIHN0YWcpCiB7Ci0JY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPnRwdF9maWZvLCBzdGFnKTsKKwljeGlvX2hhbF9wdXRfcmVzb3VyY2UoJnJzY3AtPnRwdF9maWZvLCAmcnNjcC0+dHB0X2ZpZm9fbG9jaywgc3RhZyk7CiB9CiAKIHUzMiBjeGlvX2hhbF9nZXRfcXBpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0JdTMyIHFwaWQgPSBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+cXBpZF9maWZvKTsKKwl1MzIgcXBpZCA9IGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+cXBpZF9maWZvLAorCQkJJnJzY3AtPnFwaWRfZmlmb19sb2NrKTsKIAlQREJHKCIlcyBxcGlkIDB4JXhcbiIsIF9fZnVuY19fLCBxcGlkKTsKIAlyZXR1cm4gcXBpZDsKIH0KQEAgLTIxMywzNSArMjE2LDM1IEBACiB2b2lkIGN4aW9faGFsX3B1dF9xcGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCwgdTMyIHFwaWQpCiB7CiAJUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX2Z1bmNfXywgcXBpZCk7Ci0JY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPnFwaWRfZmlmbywgcXBpZCk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT5xcGlkX2ZpZm8sICZyc2NwLT5xcGlkX2ZpZm9fbG9jaywgcXBpZCk7CiB9CiAKIHUzMiBjeGlvX2hhbF9nZXRfY3FpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0JcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZShyc2NwLT5jcWlkX2ZpZm8pOworCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UoJnJzY3AtPmNxaWRfZmlmbywgJnJzY3AtPmNxaWRfZmlmb19sb2NrKTsKIH0KIAogdm9pZCBjeGlvX2hhbF9wdXRfY3FpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBjcWlkKQogewotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT5jcWlkX2ZpZm8sIGNxaWQpOworCWN4aW9faGFsX3B1dF9yZXNvdXJjZSgmcnNjcC0+Y3FpZF9maWZvLCAmcnNjcC0+Y3FpZF9maWZvX2xvY2ssIGNxaWQpOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X3BkaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+cGRpZF9maWZvKTsKKwlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKCZyc2NwLT5wZGlkX2ZpZm8sICZyc2NwLT5wZGlkX2ZpZm9fbG9jayk7CiB9CiAKIHZvaWQgY3hpb19oYWxfcHV0X3BkaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgcGRpZCkKIHsKLQljeGlvX2hhbF9wdXRfcmVzb3VyY2UocnNjcC0+cGRpZF9maWZvLCBwZGlkKTsKKwljeGlvX2hhbF9wdXRfcmVzb3VyY2UoJnJzY3AtPnBkaWRfZmlmbywgJnJzY3AtPnBkaWRfZmlmb19sb2NrLCBwZGlkKTsKIH0KIAogdm9pZCBjeGlvX2hhbF9kZXN0cm95X3Jlc291cmNlKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQlrZmlmb19mcmVlKHJzY3AtPnRwdF9maWZvKTsKLQlrZmlmb19mcmVlKHJzY3AtPmNxaWRfZmlmbyk7Ci0Ja2ZpZm9fZnJlZShyc2NwLT5xcGlkX2ZpZm8pOwotCWtmaWZvX2ZyZWUocnNjcC0+cGRpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT50cHRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+Y3FpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5xcGlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnBkaWRfZmlmbyk7CiAJa2ZyZWUocnNjcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCmluZGV4IDdlNWYzMGQuLmYxZThhZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAJc2l6ZV90IHJlY3ZidWZfc2l6ZSA9IDE1MDA7CiAJaW50IHJlY3ZsZW47CiAJc3RydWN0IHNvY2tldCAqc29ja2V0ID0gTlVMTDsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAKIAkvKiBhbGxvY2F0ZSBidWZmZXIgbWVtb3J5ICovCiAJcmVjdmJ1ZiA9IGttYWxsb2MocmVjdmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCmluZGV4IDNjY2M4YWYuLjJiZjU3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYwpAQCAtMTI0LDE1ICsxMjQsMTIgQEAKIAlhdG9taWNfdCByeGNsa19kaXZpZGVyOwogCWF0b21pY190IHJ4X2ludmVydDsKIAotCXN0cnVjdCBrZmlmbyAqcnhfa2ZpZm87CisJc3RydWN0IGtmaWZvIHJ4X2tmaWZvOwogCXNwaW5sb2NrX3Qgcnhfa2ZpZm9fbG9jazsKIAogCXN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHR4X3BhcmFtczsKIAlzdHJ1Y3QgbXV0ZXggdHhfcGFyYW1zX2xvY2s7CiAJYXRvbWljX3QgdHhjbGtfZGl2aWRlcjsKLQotCXN0cnVjdCBrZmlmbyAqdHhfa2ZpZm87Ci0Jc3BpbmxvY2tfdCB0eF9rZmlmb19sb2NrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyMzg4OF9pcl9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKQEAgLTUyMiw2ICs1MTksNyBAQAogewogCXN0cnVjdCBjeDIzODg4X2lyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHN0YXRlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXUzMiBjbnRybCA9IGN4MjM4ODhfaXJfcmVhZDQoZGV2LCBDWDIzODg4X0lSX0NOVFJMX1JFRyk7CiAJdTMyIGlycWVuID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfSVJRRU5fUkVHKTsKQEAgLTU5NCw4ICs1OTIsOSBAQAogCQkJaWYgKGkgPT0gMCkKIAkJCQlicmVhazsKIAkJCWogPSBpICogc2l6ZW9mKHUzMik7Ci0JCQlrID0ga2ZpZm9fcHV0KHN0YXRlLT5yeF9rZmlmbywKLQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqKTsKKwkJCWsgPSBrZmlmb19pbl9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqLAorCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7CiAJCQlpZiAoayAhPSBqKQogCQkJCWtyb3IrKzsgLyogcnhfa2ZpZm8gb3ZlciBydW4gKi8KIAkJfQpAQCAtNjMxLDggKzYzMCwxMSBAQAogCQljeDIzODg4X2lyX3dyaXRlNChkZXYsIENYMjM4ODhfSVJfQ05UUkxfUkVHLCBjbnRybCk7CiAJCSpoYW5kbGVkID0gdHJ1ZTsKIAl9Ci0JaWYgKGtmaWZvX2xlbihzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKwlpZiAoa2ZpZm9fbGVuKCZzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCiAJCWV2ZW50cyB8PSBWNEwyX1NVQkRFVl9JUl9SWF9GSUZPX1NFUlZJQ0VfUkVROworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CiAKIAlpZiAoZXZlbnRzKQogCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIFY0TDJfU1VCREVWX0lSX1JYX05PVElGWSwgJmV2ZW50cyk7CkBAIC02NTcsNyArNjU5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbiA9IGtmaWZvX2dldChzdGF0ZS0+cnhfa2ZpZm8sIGJ1Ziwgbik7CisJbiA9IGtmaWZvX291dF9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywgYnVmLCBuLCAmc3RhdGUtPnJ4X2tmaWZvX2xvY2spOwogCiAJbiAvPSBzaXplb2YodTMyKTsKIAkqbnVtID0gbiAqIHNpemVvZih1MzIpOwpAQCAtNzg1LDcgKzc4NywxMiBAQAogCW8tPmludGVycnVwdF9lbmFibGUgPSBwLT5pbnRlcnJ1cHRfZW5hYmxlOwogCW8tPmVuYWJsZSA9IHAtPmVuYWJsZTsKIAlpZiAocC0+ZW5hYmxlKSB7Ci0JCWtmaWZvX3Jlc2V0KHN0YXRlLT5yeF9rZmlmbyk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CisJCWtmaWZvX3Jlc2V0KCZzdGF0ZS0+cnhfa2ZpZm8pOworCQkvKiByZXNldCB0eF9maWZvIHRvbyBpZiB0aGVyZSBpcyBvbmUuLi4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHAtPmludGVycnVwdF9lbmFibGUpCiAJCQlpcnFlbmFibGVfcngoZGV2LCBJUlFFTl9SU0UgfCBJUlFFTl9SVEUgfCBJUlFFTl9ST0UpOwogCQljb250cm9sX3J4X2VuYWJsZShkZXYsIHAtPmVuYWJsZSk7CkBAIC04OTIsNyArODk5LDYgQEAKIAlvLT5pbnRlcnJ1cHRfZW5hYmxlID0gcC0+aW50ZXJydXB0X2VuYWJsZTsKIAlvLT5lbmFibGUgPSBwLT5lbmFibGU7CiAJaWYgKHAtPmVuYWJsZSkgewotCQlrZmlmb19yZXNldChzdGF0ZS0+dHhfa2ZpZm8pOwogCQlpZiAocC0+aW50ZXJydXB0X2VuYWJsZSkKIAkJCWlycWVuYWJsZV90eChkZXYsIElSUUVOX1RTRSk7CiAJCWNvbnRyb2xfdHhfZW5hYmxlKGRldiwgcC0+ZW5hYmxlKTsKQEAgLTExNjgsMTkgKzExNzQsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnJ4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9SWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT5yeF9rZmlmbyA9PSBOVUxMKQorCWlmIChrZmlmb19hbGxvYygmc3RhdGUtPnJ4X2tmaWZvLCBDWDIzODg4X0lSX1JYX0tGSUZPX1NJWkUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnR4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9UWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT50eF9rZmlmbyA9PSBOVUxMKSB7Ci0JCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJc3RhdGUtPmRldiA9IGRldjsKIAlzdGF0ZS0+aWQgPSBWNEwyX0lERU5UX0NYMjM4ODhfSVI7CiAJc3RhdGUtPnJldiA9IDA7CkBAIC0xMjExLDggKzEyMDcsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzKSk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGlyLCB0eF9zX3BhcmFtZXRlcnMsICZkZWZhdWx0X3BhcmFtcyk7CiAJfSBlbHNlIHsKLQkJa2ZpZm9fZnJlZShzdGF0ZS0+cnhfa2ZpZm8pOwotCQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJCWtmaWZvX2ZyZWUoJnN0YXRlLT5yeF9rZmlmbyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMjMxLDggKzEyMjYsNyBAQAogCiAJc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJa2ZpZm9fZnJlZSgmc3RhdGUtPnJ4X2tmaWZvKTsKIAlrZnJlZShzdGF0ZSk7CiAJLyogTm90aGluZyBtb3JlIHRvIGZyZWUoKSBhcyBzdGF0ZSBoZWxkIHRoZSBhY3R1YWwgdjRsMl9zdWJkZXYgb2JqZWN0ICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IDZmZmE2NGMuLmI0MjE4NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC04MDAsOCArODAwLDggQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJaWYgKG1leWUubWNoaXBfbW9kZSA9PSBNQ0hJUF9ISUNfTU9ERV9DT05UX09VVCkgewotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CkBAIC04MTEsNyArODExLDggQEAKIAkJbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0uc3RhdGUgPSBNRVlFX0JVRl9ET05FOwogCQlkb19nZXR0aW1lb2ZkYXkoJm1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnRpbWVzdGFtcCk7CiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnNlcXVlbmNlID0gc2VxdWVuY2UrKzsKLQkJa2ZpZm9fcHV0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLCBzaXplb2YoaW50KSk7CisJCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCisJCQkJc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1leWUucHJvY19saXN0KTsKIAl9IGVsc2UgewogCQlpbnQgc2l6ZTsKQEAgLTgyMCw4ICs4MjEsOCBAQAogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtODMxLDcgKzgzMiw4IEBACiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnN0YXRlID0gTUVZRV9CVUZfRE9ORTsKIAkJZG9fZ2V0dGltZW9mZGF5KCZtZXllLmdyYWJfYnVmZmVyW3JlcW5yXS50aW1lc3RhbXApOwogCQltZXllLmdyYWJfYnVmZmVyW3JlcW5yXS5zZXF1ZW5jZSA9IHNlcXVlbmNlKys7Ci0JCWtmaWZvX3B1dChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwgc2l6ZW9mKGludCkpOworCQlrZmlmb19pbl9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkJCXNpemVvZihpbnQpLCAmbWV5ZS5kb25lcV9sb2NrKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtZXllLnByb2NfbGlzdCk7CiAJfQogCW1jaGlwX2ZyZWVfZnJhbWUoKTsKQEAgLTg1OSw4ICs4NjEsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCXJldHVybiAwOwogfQogCkBAIC05MzMsNyArOTM1LDggQEAKIAkJbWNoaXBfY29udF9jb21wcmVzc2lvbl9zdGFydCgpOwogCiAJbWV5ZS5ncmFiX2J1ZmZlclsqbmJdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpLAorCQkJICZtZXllLmdyYWJxX2xvY2spOwogCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtOTY1LDcgKzk2OCw5IEBACiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTUVZRV9CVUZfRE9ORToKIAkJbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUgPSBNRVlFX0JVRl9VTlVTRUQ7Ci0JCWtmaWZvX2dldChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZ1bnVzZWQsIHNpemVvZihpbnQpKTsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnVudXNlZCwKKwkJCQlzaXplb2YoaW50KSwgJm1leWUuZG9uZXFfbG9jaykgIT0gc2l6ZW9mKGludCkpCisJCQkJCWJyZWFrOwogCX0KIAkqaSA9IG1leWUuZ3JhYl9idWZmZXJbKmldLnNpemU7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwpAQCAtMTQ1Miw3ICsxNDU3LDggQEAKIAlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwogCWJ1Zi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKIAltZXllLmdyYWJfYnVmZmVyW2J1Zi0+aW5kZXhdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsCisJCQlzaXplb2YoaW50KSwgJm1leWUuZ3JhYnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0xNDY3LDE5ICsxNDczLDE5IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCi0JaWYgKGtmaWZvX2xlbihtZXllLmRvbmVxKSA9PSAwICYmIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkgPT0gMCAmJiBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWV5ZS5wcm9jX2xpc3QsCi0JCQkJICAgICBrZmlmb19sZW4obWV5ZS5kb25lcSkgIT0gMCkgPCAwKSB7CisJCQkJICAgICBrZmlmb19sZW4oJm1leWUuZG9uZXEpICE9IDApIDwgMCkgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JaWYgKCFrZmlmb19nZXQobWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCi0JCSAgICAgICBzaXplb2YoaW50KSkpIHsKKwlpZiAoIWtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkgICAgICAgc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spKSB7CiAJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xNTI5LDggKzE1MzUsOCBAQAogewogCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJbWNoaXBfaGljX3N0b3AoKTsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKQEAgLTE1NzIsNyArMTU3OCw3IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCXBvbGxfd2FpdChmaWxlLCAmbWV5ZS5wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4obWV5ZS5kb25lcSkpCisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkpCiAJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCXJldHVybiByZXM7CkBAIC0xNzQ1LDE2ICsxNzUxLDE0IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJm1leWUuZ3JhYnFfbG9jayk7Ci0JbWV5ZS5ncmFicSA9IGtmaWZvX2FsbG9jKHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywgR0ZQX0tFUk5FTCwKLQkJCQkgJm1leWUuZ3JhYnFfbG9jayk7Ci0JaWYgKElTX0VSUihtZXllLmdyYWJxKSkgeworCWlmIChrZmlmb19hbGxvYygmbWV5ZS5ncmFicSwgc2l6ZW9mKGludCkgKiBNRVlFX01BWF9CVUZOQlJTLAorCQkJCUdGUF9LRVJORUwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogZmlmbyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0a2ZpZm9hbGxvYzE7CiAJfQogCXNwaW5fbG9ja19pbml0KCZtZXllLmRvbmVxX2xvY2spOwotCW1leWUuZG9uZXEgPSBrZmlmb19hbGxvYyhzaXplb2YoaW50KSAqIE1FWUVfTUFYX0JVRk5CUlMsIEdGUF9LRVJORUwsCi0JCQkJICZtZXllLmRvbmVxX2xvY2spOwotCWlmIChJU19FUlIobWV5ZS5kb25lcSkpIHsKKwlpZiAoa2ZpZm9fYWxsb2MoJm1leWUuZG9uZXEsIHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywKKwkJCQlHRlBfS0VSTkVMKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1leWU6IGZpZm8gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dGtmaWZvYWxsb2MyOwogCX0KQEAgLTE4NjgsOSArMTg3Miw5IEBACiBvdXRlbmFibGVkZXY6CiAJc29ueV9waWNfY2FtZXJhX2NvbW1hbmQoU09OWV9QSUNfQ09NTUFORF9TRVRDQU1FUkEsIDApOwogb3V0c29ueXBpZW5hYmxlOgotCWtmaWZvX2ZyZWUobWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CiBvdXRrZmlmb2FsbG9jMjoKLQlrZmlmb19mcmVlKG1leWUuZ3JhYnEpOworCWtmaWZvX2ZyZWUoJm1leWUuZ3JhYnEpOwogb3V0a2ZpZm9hbGxvYzE6CiAJdmZyZWUobWV5ZS5ncmFiX3RlbXApOwogb3V0dm1hbGxvYzoKQEAgLTE5MDEsOCArMTkwNSw4IEBACiAKIAlzb255X3BpY19jYW1lcmFfY29tbWFuZChTT05ZX1BJQ19DT01NQU5EX1NFVENBTUVSQSwgMCk7CiAKLQlrZmlmb19mcmVlKG1leWUuZG9uZXEpOwotCWtmaWZvX2ZyZWUobWV5ZS5ncmFicSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5ncmFicSk7CiAKIAl2ZnJlZShtZXllLmdyYWJfdGVtcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKaW5kZXggNWY3MGExMC4uMTMyMWFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKQEAgLTMwMyw5ICszMDMsOSBAQAogCXN0cnVjdCBtZXllX2dyYWJfYnVmZmVyIGdyYWJfYnVmZmVyW01FWUVfTUFYX0JVRk5CUlNdOwogCWludCB2bWFfdXNlX2NvdW50W01FWUVfTUFYX0JVRk5CUlNdOyAvKiBtbWFwIGNvdW50ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBtdXRleCBmb3Igb3Blbi9tbWFwLi4uICovCi0Jc3RydWN0IGtmaWZvICpncmFicTsJCS8qIHF1ZXVlIGZvciBidWZmZXJzIHRvIGJlIGdyYWJiZWQgKi8KKwlzdHJ1Y3Qga2ZpZm8gZ3JhYnE7CQkvKiBxdWV1ZSBmb3IgYnVmZmVycyB0byBiZSBncmFiYmVkICovCiAJc3BpbmxvY2tfdCBncmFicV9sb2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSAqLwotCXN0cnVjdCBrZmlmbyAqZG9uZXE7CQkvKiBxdWV1ZSBmb3IgZ3JhYmJlZCBidWZmZXJzICovCisJc3RydWN0IGtmaWZvIGRvbmVxOwkJLyogcXVldWUgZm9yIGdyYWJiZWQgYnVmZmVycyAqLwogCXNwaW5sb2NrX3QgZG9uZXFfbG9jazsJCS8qIGxvY2sgcHJvdGVjdGluZyB0aGUgcXVldWUgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBwcm9jX2xpc3Q7CS8qIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CS8qIHZpZGVvIGRldmljZSBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNGJmYzgwOC4uNjVkZjFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNjUzLDEyICs2NTMsMjAgQEAKIGJueDJfbmV0aWZfc3RvcChzdHJ1Y3QgYm54MiAqYnApCiB7CiAJYm54Ml9jbmljX3N0b3AoYnApOwotCWJueDJfZGlzYWJsZV9pbnRfc3luYyhicCk7CiAJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJaW50IGk7CisKIAkJYm54Ml9uYXBpX2Rpc2FibGUoYnApOwogCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOwotCQlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCQkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KKwkJZm9yIChpID0gMDsgaSA8ICBicC0+ZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKworCQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBpKTsKKwkJCXR4cS0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQl9CiAJfQorCWJueDJfZGlzYWJsZV9pbnRfc3luYyhicCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IGQwZWMxNzguLjE2NmNjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVzIHx8ICFpcnEpIHsKKwlpZiAoIXJlcyB8fCBpcnEgPD0gMCkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggOGVkYWM4OS4uMzRlMDMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTIyNzIsNyArMjI3Miw3IEBACiAJdW5zaWduZWQgaW50IGNsa19kaXY7CiAJaW50IG1kaW9fYnVzX2ZyZXEgPSBlbWFjX2J1c19mcmVxdWVuY3k7CiAKLQlpZiAobWRpb19tYXhfZnJlcSAmIG1kaW9fYnVzX2ZyZXEpCisJaWYgKG1kaW9fbWF4X2ZyZXEgJiYgbWRpb19idXNfZnJlcSkKIAkJY2xrX2RpdiA9ICgobWRpb19idXNfZnJlcSAvIG1kaW9fbWF4X2ZyZXEpIC0gMSk7CiAJZWxzZQogCQljbGtfZGl2ID0gMHhGRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA5Mjk3MDFjLi44MzlmYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xODI5LDYgKzE4MjksNyBAQAogCQkJCSAgJm5pYy0+Y2JzX2RtYV9hZGRyKTsKIAlpZiAoIW5pYy0+Y2JzKQogCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobmljLT5jYnMsIDAsIGNvdW50ICogc2l6ZW9mKHN0cnVjdCBjYikpOwogCiAJZm9yIChjYiA9IG5pYy0+Y2JzLCBpID0gMDsgaSA8IGNvdW50OyBjYisrLCBpKyspIHsKIAkJY2ItPm5leHQgPSAoaSArIDEgPCBjb3VudCkgPyBjYiArIDEgOiBuaWMtPmNiczsKQEAgLTE4MzcsNyArMTgzOCw2IEBACiAJCWNiLT5kbWFfYWRkciA9IG5pYy0+Y2JzX2RtYV9hZGRyICsgaSAqIHNpemVvZihzdHJ1Y3QgY2IpOwogCQljYi0+bGluayA9IGNwdV90b19sZTMyKG5pYy0+Y2JzX2RtYV9hZGRyICsKIAkJCSgoaSsxKSAlIGNvdW50KSAqIHNpemVvZihzdHJ1Y3QgY2IpKTsKLQkJY2ItPnNrYiA9IE5VTEw7CiAJfQogCiAJbmljLT5jYl90b191c2UgPSBuaWMtPmNiX3RvX3NlbmQgPSBuaWMtPmNiX3RvX2NsZWFuID0gbmljLT5jYnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IGMxYTQyY2YuLmI5Nzk0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC0xMjkwLDcgKzEyOTAsNiBAQAogc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXUzMiBjdHJsOwotCXUzMiBsZWRfY3RybDsKIAlzMzIgcmV0X3ZhbDsKIAogCWN0cmwgPSBlcjMyKENUUkwpOwpAQCAtMTMwNSwxMSArMTMwNCw2IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGh5X2lncF8yOgogCQlyZXRfdmFsID0gZTEwMDBlX2NvcHBlcl9saW5rX3NldHVwX2lncChodyk7Ci0JCS8qIFNldHVwIGFjdGl2aXR5IExFRCAqLwotCQlsZWRfY3RybCA9IGVyMzIoTEVEQ1RMKTsKLQkJbGVkX2N0cmwgJj0gSUdQX0FDVElWSVRZX0xFRF9NQVNLOwotCQlsZWRfY3RybCB8PSAoSUdQX0FDVElWSVRZX0xFRF9FTkFCTEUgfCBJR1BfTEVEM19NT0RFKTsKLQkJZXczMihMRURDVEwsIGxlZF9jdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDY4NTBkYzAuLmUwNjIwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTM1Nyw4ICszNTcsMTEgQEAKIAkvKiBDb25maWd1cmUgdGhlIGNvYWxlc2Npbmcgc3VwcG9ydCAqLwogCWdmYXJfY29uZmlndXJlX2NvYWxlc2NpbmcocHJpdiwgMHhGRiwgMHhGRik7CiAKLQlpZiAocHJpdi0+cnhfZmlsZXJfZW5hYmxlKQorCWlmIChwcml2LT5yeF9maWxlcl9lbmFibGUpIHsKIAkJcmN0cmwgfD0gUkNUUkxfRklMUkVOOworCQkvKiBQcm9ncmFtIHRoZSBSSVIwIHJlZyB3aXRoIHRoZSByZXF1aXJlZCBkaXN0cmlidXRpb24gKi8KKwkJZ2Zhcl93cml0ZSgmcmVncy0+cmlyMCwgREVGQVVMVF9SSVIwKTsKKwl9CiAKIAlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCiAJCXJjdHJsIHw9IFJDVFJMX0NIRUNLU1VNTUlORzsKQEAgLTQxNCw2ICs0MTcsMzYgQEAKIAlnZmFyX3dyaXRlKCZyZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmLCBwcml2LT5maWZvX3N0YXJ2ZV9vZmYpOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdmYXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cyA9IDAsIHJ4X2J5dGVzID0gMCwgcnhfZHJvcHBlZCA9IDA7CisJdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzID0gMCwgdHhfYnl0ZXMgPSAwOworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJcnhfcGFja2V0cyArPSBwcml2LT5yeF9xdWV1ZVtpXS0+c3RhdHMucnhfcGFja2V0czsKKwkJcnhfYnl0ZXMgKz0gcHJpdi0+cnhfcXVldWVbaV0tPnN0YXRzLnJ4X2J5dGVzOworCQlyeF9kcm9wcGVkICs9IHByaXYtPnJ4X3F1ZXVlW2ldLT5zdGF0cy5yeF9kcm9wcGVkOworCX0KKworCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyA9IHJ4X2J5dGVzOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCA9IHJ4X2Ryb3BwZWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJdHhfYnl0ZXMgKz0gdHhxLT50eF9ieXRlczsKKwkJdHhfcGFja2V0cyArPSB0eHEtPnR4X3BhY2tldHM7CisJfQorCisJZGV2LT5zdGF0cy50eF9ieXRlcyA9IHR4X2J5dGVzOworCWRldi0+c3RhdHMudHhfcGFja2V0cyA9IHR4X3BhY2tldHM7CisKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiA9IGdmYXJfZW5ldF9vcGVuLAogCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKQEAgLTQyMyw2ICs0NTYsNyBAQAogCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKIAkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKIAkubmRvX3NlbGVjdF9xdWV1ZSA9IGdmYXJfc2VsZWN0X3F1ZXVlLAorCS5uZG9fZ2V0X3N0YXRzID0gZ2Zhcl9nZXRfc3RhdHMsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLApAQCAtMTAyMiw2ICsxMDU2LDkgQEAKIAkJcHJpdi0+cnhfcXVldWVbaV0tPnJ4aWMgPSBERUZBVUxUX1JYSUM7CiAJfQogCisJLyogZW5hYmxlIGZpbGVyIGlmIHVzaW5nIG11bHRpcGxlIFJYIHF1ZXVlcyovCisJaWYocHJpdi0+bnVtX3J4X3F1ZXVlcyA+IDEpCisJCXByaXYtPnJ4X2ZpbGVyX2VuYWJsZSA9IDE7CiAJLyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqLwogCXByaXYtPm1zZ19lbmFibGUgPSAoTkVUSUZfTVNHX0lGVVAgPDwgMSApIC0gMTsKIApAQCAtMTkzNyw3ICsxOTc0LDggQEAKIAl9CiAKIAkvKiBVcGRhdGUgdHJhbnNtaXQgc3RhdHMgKi8KLQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXR4cS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJdHhxLT50eF9wYWNrZXRzICsrOwogCiAJdHhiZHAgPSB0eGJkcF9zdGFydCA9IHR4X3F1ZXVlLT5jdXJfdHg7CiAKQEAgLTIyOTUsOCArMjMzMyw2IEBACiAJdHhfcXVldWUtPnNrYl9kaXJ0eXR4ID0gc2tiX2RpcnR5dHg7CiAJdHhfcXVldWUtPmRpcnR5X3R4ID0gYmRwOwogCi0JZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IGhvd21hbnk7Ci0KIAlyZXR1cm4gaG93bWFueTsKIH0KIApAQCAtMjUxMCwxNCArMjU0NiwxNCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwotCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlyeF9xdWV1ZS0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJaG93bWFueSsrOwogCiAJCQlpZiAobGlrZWx5KHNrYikpIHsKIAkJCQlwa3RfbGVuID0gYmRwLT5sZW5ndGggLSBFVEhfRkNTX0xFTjsKIAkJCQkvKiBSZW1vdmUgdGhlIEZDUyBmcm9tIHRoZSBwYWNrZXQgbGVuZ3RoICovCiAJCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwotCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJCQlyeF9xdWV1ZS0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCQkJCWdmYXJfcHJvY2Vzc19mcmFtZShkZXYsIHNrYiwgYW1vdW50X3B1bGwpOwogCkBAIC0yNTI1LDcgKzI1NjEsNyBAQAogCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiJXM6IE1pc3Npbmcgc2tiIVxuIiwgZGV2LT5uYW1lKTsKLQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlyeF9xdWV1ZS0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXByaXYtPmV4dHJhX3N0YXRzLnJ4X3NrYm1pc3NpbmcrKzsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGNiYjQ1MTAuLjNkNzJkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTMzMyw3ICszMzMsNyBAQAogI2RlZmluZSBJTUFTS19CU1kgICAgICAgICAgICAgICAweDIwMDAwMDAwCiAjZGVmaW5lIElNQVNLX0VCRVJSICAgICAgICAgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgSU1BU0tfTVNSTwkJMHgwNDAwMDAwMAotI2RlZmluZSBJTUFTS19HUlNDICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIElNQVNLX0dUU0MgICAgICAgICAgICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgSU1BU0tfQkFCVAkJMHgwMTAwMDAwMAogI2RlZmluZSBJTUFTS19UWEMgICAgICAgICAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIElNQVNLX1RYRUVOCQkweDAwNDAwMDAwCkBAIC0zNDQsNyArMzQ0LDcgQEAKICNkZWZpbmUgSU1BU0tfWEZVTgkJMHgwMDAxMDAwMAogI2RlZmluZSBJTUFTS19SWEIwICAgICAgICAgICAgICAweDAwMDA4MDAwCiAjZGVmaW5lIElNQVNLX01BRwkJMHgwMDAwMDgwMAotI2RlZmluZSBJTUFTS19HVFNDICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElNQVNLX0dSU0MgICAgICAgICAgICAgIDB4MDAwMDAxMDAKICNkZWZpbmUgSU1BU0tfUlhGRU4wCQkweDAwMDAwMDgwCiAjZGVmaW5lIElNQVNLX0ZJUgkJMHgwMDAwMDAwOAogI2RlZmluZSBJTUFTS19GSVEJCTB4MDAwMDAwMDQKQEAgLTQwMSw2ICs0MDEsMTAgQEAKICNkZWZpbmUgRlBSX0ZJTEVSX01BU0sJMHhGRkZGRkZGRgogI2RlZmluZSBNQVhfRklMRVJfSURYCTB4RkYKIAorLyogVGhpcyBkZWZhdWx0IFJJUiB2YWx1ZSBkaXJlY3RseSBjb3JyZXNwb25kcworICogdG8gdGhlIDMtYml0IGhhc2ggdmFsdWUgZ2VuZXJhdGVkICovCisjZGVmaW5lIERFRkFVTFRfUklSMAkweDA1Mzk3NzAwCisKIC8qIFJRRkNSIHJlZ2lzdGVyIGJpdHMgKi8KICNkZWZpbmUgUlFGQ1JfR1BJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFJRRkNSX0hBU0hUQkxfUQkJMHgwMDAwMDAwMApAQCAtOTM2LDYgKzk0MCwxNSBAQAogCXVuc2lnbmVkIHNob3J0IHR4dGltZTsKIH07CiAKKy8qCisgKiBQZXIgUlggcXVldWUgc3RhdHMKKyAqLworc3RydWN0IHJ4X3Ffc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKKwl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOworCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKK307CisKIC8qKgogICoJc3RydWN0IGdmYXJfcHJpdl9yeF9xIC0gcGVyIHJ4IHF1ZXVlIHN0cnVjdHVyZQogICoJQHJ4bG9jazogcGVyIHF1ZXVlIHJ4IHNwaW4gbG9jawpAQCAtOTU4LDYgKzk3MSw3IEBACiAJc3RydWN0CXJ4YmQ4ICpjdXJfcng7CiAJc3RydWN0CW5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZ2Zhcl9wcml2X2dycCAqZ3JwOworCXN0cnVjdCByeF9xX3N0YXRzIHN0YXRzOwogCXUxNglza2JfY3Vycng7CiAJdTE2CXFpbmRleDsKIAl1bnNpZ25lZCBpbnQJcnhfcmluZ19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IGY0OTk2ODQuLjZjYWUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTU3LDcgKzU3LDkgQEAKIAogc3RhdGljIGludCB1c2VfbXNpX3ggPSAxOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhdXRvX2Z3X3Jlc2V0ID0gQVVUT19GV19SRVNFVF9FTkFCTEVEOworc3RhdGljIGludCBhdXRvX2Z3X3Jlc2V0ID0gQVVUT19GV19SRVNFVF9FTkFCTEVEOworbW9kdWxlX3BhcmFtKGF1dG9fZndfcmVzZXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9fZndfcmVzZXQsIkF1dG8gZmlybXdhcmUgcmVzZXQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKQEAgLTI1MzQsNDIgKzI1MzYsNiBAQAogCS53cml0ZSA9IG5ldHhlbl9zeXNmc193cml0ZV9tZW0sCiB9OwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLXN0YXRpYyBzc2l6ZV90Ci1uZXR4ZW5fc3RvcmVfYXV0b19md19yZXNldChzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCXN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi0KLXsKLQl1bnNpZ25lZCBsb25nIG5ldzsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDE2LCAmbmV3KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKG5ldyA9PSBBVVRPX0ZXX1JFU0VUX0VOQUJMRUQpIHx8IChuZXcgPT0gQVVUT19GV19SRVNFVF9ESVNBQkxFRCkpIHsKLQkJYXV0b19md19yZXNldCA9IG5ldzsKLQkJcmV0dXJuIGNvdW50OwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3NpemVfdAotbmV0eGVuX3Nob3dfYXV0b19md19yZXNldChzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCXN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQotCi17Ci0JaWYgKGF1dG9fZndfcmVzZXQgPT0gQVVUT19GV19SRVNFVF9FTkFCTEVEKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJlbmFibGVkXG4iKTsKLQllbHNlCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImRpc2FibGVkXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIG1vZF9hdHRyX2Z3X3Jlc2V0ID0gewotCS5hdHRyID0gey5uYW1lID0gImF1dG9fZndfcmVzZXQiLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAotCS5zaG93ID0gbmV0eGVuX3Nob3dfYXV0b19md19yZXNldCwKLQkuc3RvcmUgPSBuZXR4ZW5fc3RvcmVfYXV0b19md19yZXNldCwKLX07Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQKIG5ldHhlbl9jcmVhdGVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNzc1LDIzICsyNzQxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0Jc3RydWN0IG1vZHVsZSAqbW9kID0gVEhJU19NT0RVTEU7Ci0jZW5kaWYKLQogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOwogCiAjaWZkZWYgQ09ORklHX0lORVQKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5ldHhlbl9uZXRkZXZfY2IpOwogCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZuZXR4ZW5faW5ldGFkZHJfY2IpOwogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCWlmIChzeXNmc19jcmVhdGVfZmlsZSgmbW9kLT5ta29iai5rb2JqLCAmbW9kX2F0dHJfZndfcmVzZXQuYXR0cikpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBjcmVhdGUgYXV0b19md19yZXNldCAiCi0JCQkJInN5c2ZzIGVudHJ5LiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotI2VuZGlmCi0KIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmV0eGVuX2RyaXZlcik7CiB9CiAKQEAgLTI3OTksMTIgKzI3NTQsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0eGVuX2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01PRFVMRVMKLQlzdHJ1Y3QgbW9kdWxlICptb2QgPSBUSElTX01PRFVMRTsKLQotCXN5c2ZzX3JlbW92ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosICZtb2RfYXR0cl9md19yZXNldC5hdHRyKTsKLSNlbmRpZgotCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKIAogI2lmZGVmIENPTkZJR19JTkVUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCmluZGV4IGY2M2M5NmEuLmMxM2NmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCkBAIC0zMjYsNyArMzI2LDggQEAKIAogc3RhdGljIHZvaWQgYmNtNTR4eF9hZGp1c3RfcnhyZWZjbGsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQl1MzIgdmFsLCBvcmlnOworCXUzMiBvcmlnOworCWludCB2YWw7CiAJYm9vbCBjbGsxMjVlbiA9IHRydWU7CiAKIAkvKiBBYm9ydCBpZiB3ZSBhcmUgdXNpbmcgYW4gdW50ZXN0ZWQgcGh5LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCBiOWIzNzFiLi40MjYxMWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKIAlwcml2LT5kbmxkX3NlbnQgPSBETkxEX1JFU19SRUNFSVZFRDsKIAogCS8qIElmIG5vdGhpbmcgdG8gZG8sIGdvIGJhY2sgdG8gc2xlZXAgKD8pICovCi0JaWYgKCFfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSAmJiAhcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKQorCWlmICgha2ZpZm9fbGVuKCZwcml2LT5ldmVudF9maWZvKSAmJiAhcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKQogCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfU0xFRVA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwpAQCAtMTQzOSw3ICsxNDM5LDcgQEAKIAl9CiAKIAkvKiBQZW5kaW5nIGV2ZW50cyBvciBjb21tYW5kIHJlc3BvbnNlcz8gKi8KLQlpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykgfHwgcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKSB7CisJaWYgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykgfHwgcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKSB7CiAJCWFsbG93ZWQgPSAwOwogCQlsYnNfZGViX2hvc3QoInBlbmRpbmcgZXZlbnRzIG9yIGNvbW1hbmQgcmVzcG9uc2VzXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IDZhOGQyYjIuLjA1YmIyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSAic2Nhbi5oIgogI2luY2x1ZGUgImFzc29jLmgiCiAKLQorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKIC8qKiBzbGVlcF9wYXJhbXMgKi8KIHN0cnVjdCBzbGVlcF9wYXJhbXMgewpAQCAtMTIwLDcgKzEyMCw3IEBACiAJdTMyIHJlc3BfbGVuWzJdOwogCiAJLyogRXZlbnRzIHNlbnQgZnJvbSBoYXJkd2FyZSB0byBkcml2ZXIgKi8KLQlzdHJ1Y3Qga2ZpZm8gKmV2ZW50X2ZpZm87CisJc3RydWN0IGtmaWZvIGV2ZW50X2ZpZm87CiAKIAkvKiogdGhyZWFkIHRvIHNlcnZpY2UgaW50ZXJydXB0cyAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWFpbl90aHJlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggZGIzOGE1YS4uYzI5NzVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5jbWRwZW5kaW5ncSkgJiYKIAkJCQkJIShwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkKSkKIAkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UgaGF2ZSBhIGNvbW1hbmQgdG8gc2VuZCAqLwotCQllbHNlIGlmIChfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSkKKwkJZWxzZSBpZiAoa2ZpZm9fbGVuKCZwcml2LT5ldmVudF9maWZvKSkKIAkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UgaGF2ZSBhbiBldmVudCB0byBwcm9jZXNzICovCiAJCWVsc2UKIAkJCXNob3VsZHNsZWVwID0gMTsJLyogTm8gY29tbWFuZCAqLwpAQCAtNTExLDEwICs1MTEsMTMgQEAKIAogCQkvKiBQcm9jZXNzIGhhcmR3YXJlIGV2ZW50cywgZS5nLiBjYXJkIHJlbW92ZWQsIGxpbmsgbG9zdCAqLwogCQlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCXdoaWxlIChfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSkgeworCQl3aGlsZSAoa2ZpZm9fbGVuKCZwcml2LT5ldmVudF9maWZvKSkgewogCQkJdTMyIGV2ZW50OwotCQkJX19rZmlmb19nZXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LAotCQkJCXNpemVvZihldmVudCkpOworCisJCQlpZiAoa2ZpZm9fb3V0KCZwcml2LT5ldmVudF9maWZvLAorCQkJCSh1bnNpZ25lZCBjaGFyICopICZldmVudCwgc2l6ZW9mKGV2ZW50KSkgIT0KKwkJCQlzaXplb2YoZXZlbnQpKQorCQkJCQlicmVhazsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwogCQkJbGJzX3Byb2Nlc3NfZXZlbnQocHJpdiwgZXZlbnQpOwogCQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwpAQCAtODgzLDEwICs4ODYsOSBAQAogCXByaXYtPnJlc3BfbGVuWzBdID0gcHJpdi0+cmVzcF9sZW5bMV0gPSAwOwogCiAJLyogQ3JlYXRlIHRoZSBldmVudCBGSUZPICovCi0JcHJpdi0+ZXZlbnRfZmlmbyA9IGtmaWZvX2FsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwsIE5VTEwpOwotCWlmIChJU19FUlIocHJpdi0+ZXZlbnRfZmlmbykpIHsKKwlyZXQgPSBrZmlmb19hbGxvYygmcHJpdi0+ZXZlbnRfZmlmbywgc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgewogCQlsYnNfcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZXZlbnQgRklGTyBidWZmZXJcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTkwMSw4ICs5MDMsNyBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKIAogCWxic19mcmVlX2NtZF9idWZmZXIocHJpdik7Ci0JaWYgKHByaXYtPmV2ZW50X2ZpZm8pCi0JCWtmaWZvX2ZyZWUocHJpdi0+ZXZlbnRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcHJpdi0+ZXZlbnRfZmlmbyk7CiAJZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsKIAlkZWxfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyKTsKIAlrZnJlZShwcml2LT5uZXR3b3Jrcyk7CkBAIC0xMTc3LDcgKzExNzgsNyBAQAogCWlmIChwcml2LT5wc3N0YXRlID09IFBTX1NUQVRFX1NMRUVQKQogCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CiAKLQlfX2tmaWZvX3B1dChwcml2LT5ldmVudF9maWZvLCAodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsIHNpemVvZih1MzIpKTsKKwlrZmlmb19pbigmcHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YodTMyKSk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggYmNkNGJhOC4uYjY2MDI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAljaGFyIHBoeXNbMzJdOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBmX2RldmljZTsKLQlzdHJ1Y3Qga2ZpZm8gKmZpZm87CisJc3RydWN0IGtmaWZvIGZpZm87CiAJc3BpbmxvY2tfdCBmaWZvX2xvY2s7CiAJaW50IHJma2lsbF9zdXBwb3J0ZWQ7CiAJaW50IHJma2lsbF9zdGF0ZTsKQEAgLTgyNCwxMiArODI0LDEwIEBACiAKIAkvKiBrZmlmbyAqLwogCXNwaW5fbG9ja19pbml0KCZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKLQlmdWppdHN1X2hvdGtleS0+ZmlmbyA9Ci0JICAgIGtmaWZvX2FsbG9jKFJJTkdCVUZGRVJTSVpFICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwsCi0JCQkmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jayk7Ci0JaWYgKElTX0VSUihmdWppdHN1X2hvdGtleS0+ZmlmbykpIHsKKwllcnJvciA9IGtmaWZvX2FsbG9jKCZmdWppdHN1X2hvdGtleS0+ZmlmbywgUklOR0JVRkZFUlNJWkUgKiBzaXplb2YoaW50KSwKKwkJCUdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCWVycm9yID0gUFRSX0VSUihmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiAJCWdvdG8gZXJyX3N0b3A7CiAJfQogCkBAIC05MzQsNyArOTMyLDcgQEAKIGVycl9mcmVlX2lucHV0X2RldjoKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CiBlcnJfZnJlZV9maWZvOgotCWtmaWZvX2ZyZWUoZnVqaXRzdV9ob3RrZXktPmZpZm8pOworCWtmaWZvX2ZyZWUoJmZ1aml0c3VfaG90a2V5LT5maWZvKTsKIGVycl9zdG9wOgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC05NTYsNyArOTU0LDcgQEAKIAogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIAotCWtmaWZvX2ZyZWUoZnVqaXRzdV9ob3RrZXktPmZpZm8pOworCWtmaWZvX2ZyZWUoJmZ1aml0c3VfaG90a2V5LT5maWZvKTsKIAogCWZ1aml0c3VfaG90a2V5LT5hY3BpX2hhbmRsZSA9IE5VTEw7CiAKQEAgLTEwMDgsOSArMTAwNiwxMCBAQAogCQkJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfVFJBQ0UsCiAJCQkJCSJQdXNoIGtleWNvZGUgaW50byByaW5nYnVmZmVyIFslZF1cbiIsCiAJCQkJCWtleWNvZGUpOwotCQkJCXN0YXR1cyA9IGtmaWZvX3B1dChmdWppdHN1X2hvdGtleS0+ZmlmbywKKwkJCQlzdGF0dXMgPSBrZmlmb19pbl9sb2NrZWQoJmZ1aml0c3VfaG90a2V5LT5maWZvLAogCQkJCQkJICAgKHVuc2lnbmVkIGNoYXIgKikma2V5Y29kZSwKLQkJCQkJCSAgIHNpemVvZihrZXljb2RlKSk7CisJCQkJCQkgICBzaXplb2Yoa2V5Y29kZSksCisJCQkJCQkgICAmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jayk7CiAJCQkJaWYgKHN0YXR1cyAhPSBzaXplb2Yoa2V5Y29kZSkpIHsKIAkJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19XQVJOLAogCQkJCQkgICAgIkNvdWxkIG5vdCBwdXNoIGtleWNvZGUgWzB4JXhdXG4iLApAQCAtMTAyMSwxMSArMTAyMCwxMiBAQAogCQkJCX0KIAkJCX0gZWxzZSBpZiAoa2V5Y29kZSA9PSAwKSB7CiAJCQkJd2hpbGUgKChzdGF0dXMgPQotCQkJCQlrZmlmb19nZXQKLQkJCQkJKGZ1aml0c3VfaG90a2V5LT5maWZvLCAodW5zaWduZWQgY2hhciAqKQotCQkJCQkgJmtleWNvZGVfciwKLQkJCQkJIHNpemVvZgotCQkJCQkgKGtleWNvZGVfcikpKSA9PSBzaXplb2Yoa2V5Y29kZV9yKSkgeworCQkJCQlrZmlmb19vdXRfbG9ja2VkKAorCQkJCQkgJmZ1aml0c3VfaG90a2V5LT5maWZvLAorCQkJCQkgKHVuc2lnbmVkIGNoYXIgKikgJmtleWNvZGVfciwKKwkJCQkJIHNpemVvZihrZXljb2RlX3IpLAorCQkJCQkgJmZ1aml0c3VfaG90a2V5LT5maWZvX2xvY2spKQorCQkJCQkgPT0gc2l6ZW9mKGtleWNvZGVfcikpIHsKIAkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZV9yLCAwKTsKIAkJCQkJaW5wdXRfc3luYyhpbnB1dCk7CiAJCQkJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfVFJBQ0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCA3YTJjYzhhLi4yODk2Y2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCWF0b21pY190CQl1c2VyczsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSpqb2dfZGV2OwogCXN0cnVjdCBpbnB1dF9kZXYJKmtleV9kZXY7Ci0Jc3RydWN0IGtmaWZvCQkqZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8JCWZpZm87CiAJc3BpbmxvY2tfdAkJZmlmb19sb2NrOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3cTsKIH07CkBAIC0zMDAsOCArMzAwLDkgQEAKIHsKIAlzdHJ1Y3Qgc29ueV9sYXB0b3Bfa2V5cHJlc3Mga3A7CiAKLQl3aGlsZSAoa2ZpZm9fZ2V0KHNvbnlfbGFwdG9wX2lucHV0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAotCQkJIHNpemVvZihrcCkpID09IHNpemVvZihrcCkpIHsKKwl3aGlsZSAoa2ZpZm9fb3V0X2xvY2tlZCgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCisJCQlzaXplb2Yoa3ApLCAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKQorCQkJPT0gc2l6ZW9mKGtwKSkgewogCQltc2xlZXAoMTApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAwKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwpAQCAtMzYyLDggKzM2Myw5IEBACiAJCS8qIHdlIGVtaXQgdGhlIHNjYW5jb2RlIHNvIHdlIGNhbiBhbHdheXMgcmVtYXAgdGhlIGtleSAqLwogCQlpbnB1dF9ldmVudChrcC5kZXYsIEVWX01TQywgTVNDX1NDQU4sIGV2ZW50KTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwotCQlrZmlmb19wdXQoc29ueV9sYXB0b3BfaW5wdXQuZmlmbywKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCkpOworCQlrZmlmb19pbl9sb2NrZWQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm8sCisJCQkgICh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApLAorCQkJICAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKTsKIAogCQlpZiAoIXdvcmtfcGVuZGluZygmc29ueV9sYXB0b3BfcmVsZWFzZV9rZXlfd29yaykpCiAJCQlxdWV1ZV93b3JrKHNvbnlfbGFwdG9wX2lucHV0LndxLApAQCAtMzg1LDEyICszODcsMTAgQEAKIAogCS8qIGtmaWZvICovCiAJc3Bpbl9sb2NrX2luaXQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jayk7Ci0Jc29ueV9sYXB0b3BfaW5wdXQuZmlmbyA9Ci0JCWtmaWZvX2FsbG9jKFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJICAgICZzb255X2xhcHRvcF9pbnB1dC5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueV9sYXB0b3BfaW5wdXQuZmlmbykpIHsKKwllcnJvciA9CisJIGtmaWZvX2FsbG9jKCZzb255X2xhcHRvcF9pbnB1dC5maWZvLCBTT05ZX0xBUFRPUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYICJrZmlmb19hbGxvYyBmYWlsZWRcbiIpOwotCQllcnJvciA9IFBUUl9FUlIoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiAJCWdvdG8gZXJyX2RlY191c2VyczsKIAl9CiAKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNvbnlfbGFwdG9wX2lucHV0LndxKTsKIAogZXJyX2ZyZWVfa2ZpZm86Ci0Ja2ZpZm9fZnJlZShzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKIAogZXJyX2RlY191c2VyczoKIAlhdG9taWNfZGVjKCZzb255X2xhcHRvcF9pbnB1dC51c2Vycyk7CkBAIC01MDAsNyArNTAwLDcgQEAKIAl9CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzb255X2xhcHRvcF9pbnB1dC53cSk7Ci0Ja2ZpZm9fZnJlZShzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKIH0KIAogLyoqKioqKioqKioqIFBsYXRmb3JtIERldmljZSAqKioqKioqKioqKi8KQEAgLTIwNzksNyArMjA3OSw3IEBACiAKIHN0cnVjdCBzb255cGlfY29tcGF0X3MgewogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmaWZvX2FzeW5jOwotCXN0cnVjdCBrZmlmbwkJKmZpZm87CisJc3RydWN0IGtmaWZvCQlmaWZvOwogCXNwaW5sb2NrX3QJCWZpZm9fbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlmaWZvX3Byb2NfbGlzdDsKIAlhdG9taWNfdAkJb3Blbl9jb3VudDsKQEAgLTIxMDQsMTIgKzIxMDQsMTIgQEAKIAkvKiBGbHVzaCBpbnB1dCBxdWV1ZSBvbiBmaXJzdCBvcGVuICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb255cGlfY29tcGF0LmZpZm9fbG9jaywgZmxhZ3MpOwogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzb255cGlfY29tcGF0Lm9wZW5fY291bnQpID09IDEpCi0JCV9fa2ZpZm9fcmVzZXQoc29ueXBpX2NvbXBhdC5maWZvKTsKKwkJa2ZpZm9fcmVzZXQoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMjAsMTcgKzIxMjAsMTggQEAKIAlzc2l6ZV90IHJldDsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlpZiAoKGtmaWZvX2xlbihzb255cGlfY29tcGF0LmZpZm8pID09IDApICYmCisJaWYgKChrZmlmb19sZW4oJnNvbnlwaV9jb21wYXQuZmlmbykgPT0gMCkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc29ueXBpX2NvbXBhdC5maWZvX3Byb2NfbGlzdCwKLQkJCQkgICAgICAga2ZpZm9fbGVuKHNvbnlwaV9jb21wYXQuZmlmbykgIT0gMCk7CisJCQkJICAgICAgIGtmaWZvX2xlbigmc29ueXBpX2NvbXBhdC5maWZvKSAhPSAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd2hpbGUgKHJldCA8IGNvdW50ICYmCi0JICAgICAgIChrZmlmb19nZXQoc29ueXBpX2NvbXBhdC5maWZvLCAmYywgc2l6ZW9mKGMpKSA9PSBzaXplb2YoYykpKSB7CisJICAgICAgIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfY29tcGF0LmZpZm8sICZjLCBzaXplb2YoYyksCisJCQkgICZzb255cGlfY29tcGF0LmZpZm9fbG9jaykgPT0gc2l6ZW9mKGMpKSkgewogCQlpZiAocHV0X3VzZXIoYywgYnVmKyspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldCsrOwpAQCAtMjE0Nyw3ICsyMTQ4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29ueXBpX21pc2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4oc29ueXBpX2NvbXBhdC5maWZvKSkKKwlpZiAoa2ZpZm9fbGVuKCZzb255cGlfY29tcGF0LmZpZm8pKQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMDksNyArMjMxMCw4IEBACiAKIHN0YXRpYyB2b2lkIHNvbnlwaV9jb21wYXRfcmVwb3J0X2V2ZW50KHU4IGV2ZW50KQogewotCWtmaWZvX3B1dChzb255cGlfY29tcGF0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LCBzaXplb2YoZXZlbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJnNvbnlwaV9jb21wYXQuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmZXZlbnQsCisJCQlzaXplb2YoZXZlbnQpLCAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwogCWtpbGxfZmFzeW5jKCZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QpOwogfQpAQCAtMjMxOSwxMSArMjMyMSwxMSBAQAogCWludCBlcnJvcjsKIAogCXNwaW5fbG9ja19pbml0KCZzb255cGlfY29tcGF0LmZpZm9fbG9jayk7Ci0Jc29ueXBpX2NvbXBhdC5maWZvID0ga2ZpZm9fYWxsb2MoU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJCSAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueXBpX2NvbXBhdC5maWZvKSkgeworCWVycm9yID0KKwkga2ZpZm9fYWxsb2MoJnNvbnlwaV9jb21wYXQuZmlmbywgU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWCAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoc29ueXBpX2NvbXBhdC5maWZvKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QpOwpAQCAtMjM0MiwxNCArMjM0NCwxNCBAQAogCXJldHVybiAwOwogCiBlcnJfZnJlZV9rZmlmbzoKLQlrZmlmb19mcmVlKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2NvbXBhdC5maWZvKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIHNvbnlwaV9jb21wYXRfZXhpdCh2b2lkKQogewogCW1pc2NfZGVyZWdpc3Rlcigmc29ueXBpX21pc2NfZGV2aWNlKTsKLQlrZmlmb19mcmVlKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2NvbXBhdC5maWZvKTsKIH0KICNlbHNlCiBzdGF0aWMgaW50IHNvbnlwaV9jb21wYXRfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCBmZDEyMzE3Li4xNDhiMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGlhc3RyZWUubG9jaywgZmxhZ3MpOwogCQluZXdsY3UgPSBfYWxsb2NhdGVfbGN1KHVpZCk7CiAJCWlmIChJU19FUlIobmV3bGN1KSkKLQkJCXJldHVybiBQVFJfRVJSKGxjdSk7CisJCQlyZXR1cm4gUFRSX0VSUihuZXdsY3UpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWxpYXN0cmVlLmxvY2ssIGZsYWdzKTsKIAkJbGN1ID0gX2ZpbmRfbGN1KHNlcnZlciwgdWlkKTsKIAkJaWYgKCFsY3UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCBmNjRkMGRiOC4uNmUxNDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKi8KIAotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1kaWFnIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTQ2LDE2ICsxNDYsMTYgQEAKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGRldmljZS0+YmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMgPT0gNCkgewogCQlpZiAoIShkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZKSkgewotCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAotCQkJCSAiVGhlIGFjY2VzcyBtb2RlIG9mIGEgRElBRyBkZXZpY2UgY2hhbmdlZCIKLQkJCQkgIiB0byByZWFkLW9ubHkiKTsKKwkJCXByX3dhcm5pbmcoIiVzOiBUaGUgYWNjZXNzIG1vZGUgb2YgYSBESUFHIGRldmljZSAiCisJCQkJICAgImNoYW5nZWQgdG8gcmVhZC1vbmx5XG4iLAorCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJCX0KIAkJcmMgPSAwOwogCX0KIAlpZiAocmMpCi0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgRVJQIGZhaWxlZCB3aXRoICIKLQkJCSAgICAicmM9JWRcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IERJQUcgRVJQIGZhaWxlZCB3aXRoICIKKwkJCSAgICAicmM9JWRcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiByZXF1ZXN0IGF0IHRoZSBkZXZpY2UuIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvCkBAIC0zNzEsOCArMzcxLDkgQEAKIAkJcHJpdmF0ZS0+cHRfYmxvY2sgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXZpY2UgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICAiaW4gRElBRyBtb2RlXG4iLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKKwkJcHJfd2FybmluZygiJXM6IERldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgImluIERJQUcgbW9kZVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSAgIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTMsOCArNDE0LDggQEAKIAkJcHJpdmF0ZS0+aW9iLmZsYWdhID0gREFTRF9ESUFHX0ZMQUdBX0RFRkFVTFQ7CiAJCXJjID0gZGlhMjUwKCZwcml2YXRlLT5pb2IsIFJXX0JJTyk7CiAJCWlmIChyYyA9PSAzKSB7Ci0JCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCi0JCQkJIkEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIpOworCQkJcHJfd2FybmluZygiJXM6IEEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIsCisJCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfbGFiZWw7CiAJCX0KQEAgLTQyMyw4ICs0MjQsOSBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChic2l6ZSA+IFBBR0VfU0laRSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UiCi0JCQkgIiBvZiBhbiBpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IEFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBvZiBhbiAiCisJCQkgICAiaW5jb3JyZWN0IGZvcm1hdCAocmM9JWQpXG4iLAorCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0X2xhYmVsOwogCX0KQEAgLTQ0MiwxOCArNDQ0LDE4IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjICYmIChyYyAhPSA0KSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIGluaXRpYWxpemF0aW9uICIKLQkJCSJmYWlsZWQgd2l0aCByYz0lZFxuIiwgcmMpOworCQlwcl93YXJuaW5nKCIlczogRElBRyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWlmIChyYyA9PSA0KQogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7Ci0JCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKLQkJCSAiTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgS0Ilc1xuIiwKLQkJCSAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAotCQkJICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAotCQkJCQkgIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCi0JCQkgKHJjID09IDQpID8gIiwgcmVhZC1vbmx5IGRldmljZSIgOiAiIik7CisJCXByX2luZm8oIiVzOiBOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCAiCisJCQkiS0Ilc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCisJCQkodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKKwkJCQkJIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCisJCQkocmMgPT0gNCkgPyAiLCByZWFkLW9ubHkgZGV2aWNlIiA6ICIiKTsKIAkJcmMgPSAwOwogCX0KIG91dF9sYWJlbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggMjhlNDY0OS4uMjQ3YjJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWlmIChJU19FUlIoaWIpKSB7CiAJCXJhdzMyNzBfcHV0X3ZpZXcoJmZwLT52aWV3KTsKIAkJcmF3MzI3MF9kZWxfdmlldygmZnAtPnZpZXcpOwotCQlyYyA9IFBUUl9FUlIoZnApOworCQlyYyA9IFBUUl9FUlIoaWIpOwogCQlnb3RvIG91dDsKIAl9CiAJZnAtPnJkYnVmID0gaWI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDM2NTdmZTEuLmNiNzBmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGVfMzR4eCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggMGM3MmFhZC4uOTgyMWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZV8zNTkwIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTM2LDcgKzEzNyw3IEBACiAJCW91dC0+dHlwZV9vbl90YXBlID0gVEFQRTM5MF9LRUtMX1RZUEVfTEFCRUw7CiAJbWVtY3B5KG91dC0+bGFiZWwsIGluLT5sYWJlbCwgc2l6ZW9mKGluLT5sYWJlbCkpOwogCUVCQ0FTQyhvdXQtPmxhYmVsLCBzaXplb2YoaW4tPmxhYmVsKSk7Ci0Jc3Ryc3RyaXAob3V0LT5sYWJlbCk7CisJc3RyaW0ob3V0LT5sYWJlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludF90b19leHRfa2VrbF9wYWlyKHN0cnVjdCB0YXBlMzU5Ml9rZWtsX3BhaXIgKmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDQ3OTljYzIuLjk2ODE2MTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IDIzZDc3M2EuLjIxMjVlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0xMCw2ICsxMCw5IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggZGRjOTE0Y2MuLmIyODY0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKQEAgLTcsNiArNywxMCBAQAogICogQXV0aG9yOiBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqIEJhc2VkIG9uIHNpbXBsZSBjbGFzcyBkZXZpY2UgY29kZSBieSBHcmVnIEstSAogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlICJ0YXBlX2NsYXNzLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwppbmRleCBmNWQ2ODAyLi44MWIwOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwpAQCAtMTIsNiArMTIsOCBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggZWJkODIwYy4uMGNlYjM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTExLDYgKzExLDkgQEAKICAqIFBST0NGUyBGdW5jdGlvbnMKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCA3NTAzNTRhLi4wM2YwN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTExLDYgKzExLDkgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggOTUwOWUzOC4uN2EyOGEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC00OSw3ICs0OSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNjd3JlcV9zdG9wKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgcmMpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwogCiAJaWYgKHJlcS0+ZG9uZSkKQEAgLTU3LDcgKzU2LDYgQEAKIAlyZXEtPmRvbmUgPSAxOwogCWNjd19kZXZpY2Vfc2V0X3RpbWVvdXQoY2RldiwgMCk7CiAJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7Ci0Jc2NoLT5scG0gPSBzY2gtPnNjaGliLnBtY3cucGFtOwogCWlmIChyYyAmJiByYyAhPSAtRU5PREVWICYmIHJlcS0+ZHJjKQogCQlyYyA9IHJlcS0+ZHJjOwogCXJlcS0+Y2FsbGJhY2soY2RldiwgcmVxLT5kYXRhLCByYyk7CkBAIC04MCw3ICs3OCw2IEBACiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBQZXJmb3JtIHN0YXJ0IGZ1bmN0aW9uLiAqLwotCQlzY2gtPmxwbSA9IDB4ZmY7CiAJCW1lbXNldCgmY2Rldi0+cHJpdmF0ZS0+aXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpOwogCQlyYyA9IGNpb19zdGFydChzY2gsIGNwLCAodTgpIHJlcS0+bWFzayk7CiAJCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCA3MzkwMWM5Li5hNmM3ZDU0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xNTE5LDYgKzE1MTksNyBAQAogCXNjaC0+ZHJpdmVyID0gJmlvX3N1YmNoYW5uZWxfZHJpdmVyOwogCS8qIEluaXRpYWxpemUgdGhlIGNjd19kZXZpY2Ugc3RydWN0dXJlLiAqLwogCWNkZXYtPmRldi5wYXJlbnQ9ICZzY2gtPmRldjsKKwlzY2hfc2V0X2NkZXYoc2NoLCBjZGV2KTsKIAlpb19zdWJjaGFubmVsX3JlY29nKGNkZXYsIHNjaCk7CiAJLyogTm93IHdhaXQgZm9yIHRoZSBhc3luYy4gcmVjb2duaXRpb24gdG8gY29tZSB0byBhbiBlbmQuICovCiAJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYwppbmRleCBhYWQxODhlLi42ZmFjYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1OCBmbjsKIAogCS8qIFVzZSBuZXh0IGF2YWlsYWJsZSBwYXRoIHRoYXQgaXMgbm90IGFscmVhZHkgaW4gY29ycmVjdCBzdGF0ZS4gKi8KLQlyZXEtPmxwbSA9IGxwbV9hZGp1c3QocmVxLT5scG0sIHNjaC0+c2NoaWIucG1jdy5wYW0gJiB+c2NoLT52cG0pOworCXJlcS0+bHBtID0gbHBtX2FkanVzdChyZXEtPmxwbSwgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2spOwogCWlmICghcmVxLT5scG0pCiAJCWdvdG8gb3V0X25vcGF0aDsKIAkvKiBDaGFubmVsIHByb2dyYW0gc2V0dXAuICovCkBAIC0yNTQsMTUgKzI1NCwxNSBAQAogCSpwID0gZmlyc3Q7CiB9CiAKLXN0YXRpYyB1OCBwZ2lkX3RvX3ZwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyB1OCBwZ2lkX3RvX2RvbmVwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcGdpZCAqcGdpZDsKIAlpbnQgaTsKIAlpbnQgbHBtOwotCXU4IHZwbSA9IDA7CisJdTggZG9uZXBtID0gMDsKIAotCS8qIFNldCBWUE0gYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KKwkvKiBTZXQgYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWxwbSA9IDB4ODAgPj4gaTsKIAkJaWYgKChjZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgJiBscG0pID09IDApCkBAIC0yODIsMTAgKzI4MiwxMCBAQAogCQkJaWYgKHBnaWQtPmluZi5wcy5zdGF0ZTMgIT0gU05JRF9TVEFURTNfU0lOR0xFX1BBVEgpCiAJCQkJY29udGludWU7CiAJCX0KLQkJdnBtIHw9IGxwbTsKKwkJZG9uZXBtIHw9IGxwbTsKIAl9CiAKLQlyZXR1cm4gdnBtOworCXJldHVybiBkb25lcG07CiB9CiAKIHN0YXRpYyB2b2lkIHBnaWRfZmlsbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IHBnaWQgKnBnaWQpCkBAIC0zMDcsNiArMzA3LDcgQEAKIAlpbnQgbWlzbWF0Y2ggPSAwOwogCWludCByZXNlcnZlZCA9IDA7CiAJaW50IHJlc2V0ID0gMDsKKwl1OCBkb25lcG07CiAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtMzE2LDE4ICszMTcsMjAgQEAKIAllbHNlIGlmIChtaXNtYXRjaCkKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAllbHNlIHsKLQkJc2NoLT52cG0gPSBwZ2lkX3RvX3ZwbShjZGV2KTsKKwkJZG9uZXBtID0gcGdpZF90b19kb25lcG0oY2Rldik7CisJCXNjaC0+dnBtID0gZG9uZXBtICYgc2NoLT5vcG07CisJCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrICY9IH5kb25lcG07CiAJCXBnaWRfZmlsbChjZGV2LCBwZ2lkKTsKIAl9CiBvdXQ6CiAJQ0lPX01TR19FVkVOVCgyLCAic25pZDogZGV2aWNlIDAuJXguJTA0eDogcmM9JWQgcHZtPSUwMnggdnBtPSUwMnggIgotCQkgICAgICAibWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwgaWQtPmRldm5vLCByYywKLQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwgbWlzbWF0Y2gsCi0JCSAgICAgIHJlc2VydmVkLCByZXNldCk7CisJCSAgICAgICJ0b2RvPSUwMnggbWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwKKwkJICAgICAgaWQtPmRldm5vLCByYywgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwKKwkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2ssIG1pc21hdGNoLCByZXNlcnZlZCwgcmVzZXQpOwogCXN3aXRjaCAocmMpIHsKIAljYXNlIDA6CiAJCS8qIEFueXRoaW5nIGxlZnQgdG8gZG8/ICovCi0JCWlmIChzY2gtPnZwbSA9PSBzY2gtPnNjaGliLnBtY3cucGFtKSB7CisJCWlmIChjZGV2LT5wcml2YXRlLT5wZ2lkX3RvZG9fbWFzayA9PSAwKSB7CiAJCQl2ZXJpZnlfZG9uZShjZGV2LCBzY2gtPnZwbSA9PSAwID8gLUVBQ0NFUyA6IDApOwogCQkJcmV0dXJuOwogCQl9CkBAIC00MTEsNiArNDE0LDcgQEAKIAlzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2aWQgPSAmY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkOwogCiAJc2NoLT52cG0gPSAwOworCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKiBJbml0aWFsaXplIHJlcXVlc3QgZGF0YS4gKi8KIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+dGltZW91dAk9IFBHSURfVElNRU9VVDsKQEAgLTQ0MiwxMSArNDQ2LDE0IEBACiAgKi8KIHZvaWQgY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgInZyZnkiKTsKIAlDSU9fSEVYX0VWRU5UKDQsICZjZGV2LT5wcml2YXRlLT5kZXZfaWQsIHNpemVvZihjZGV2LT5wcml2YXRlLT5kZXZfaWQpKTsKIAkvKiBJbml0aWFsaXplIFBHSUQgZGF0YS4gKi8KIAltZW1zZXQoY2Rldi0+cHJpdmF0ZS0+cGdpZCwgMCwgc2l6ZW9mKGNkZXYtPnByaXZhdGUtPnBnaWQpKTsKIAljZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgPSAwOworCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKgogCSAqIEluaXRpYWxpemUgcGF0aGdyb3VwIGFuZCBtdWx0aXBhdGggc3RhdGUgd2l0aCB0YXJnZXQgdmFsdWVzLgogCSAqIFRoZXkgbWF5IGNoYW5nZSBpbiB0aGUgY291cnNlIG9mIHBhdGggdmVyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9mY3guYyBiL2RyaXZlcnMvczM5MC9jaW8vZmN4LmMKaW5kZXggNjE2NzdkZi4uY2E1ZTliYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9mY3guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2ZjeC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkvKiBBZGQgdGNhdCB0byB0Y2NiLiAqLwogCXRjY2IgPSB0Y3dfZ2V0X3RjY2IodGN3KTsKIAl0Y2F0ID0gKHN0cnVjdCB0Y2NiX3RjYXQgKikgJnRjY2ItPnRjYVt0Y2Ffc2l6ZSh0Y2NiKV07Ci0JbWVtc2V0KHRjYXQsIDAsIHNpemVvZih0Y2F0KSk7CisJbWVtc2V0KHRjYXQsIDAsIHNpemVvZigqdGNhdCkpOwogCS8qIENhbGN1bGF0ZSB0Y3cgaW5wdXQvb3V0cHV0IGNvdW50IGFuZCB0Y2F0IHRyYW5zcG9ydCBjb3VudC4gKi8KIAljb3VudCA9IGNhbGNfZGN3X2NvdW50KHRjY2IpOwogCWlmICh0Y3ctPncgJiYgKHRjdy0+ZmxhZ3MgJiBUQ1dfRkxBR1NfT1VUUFVUX1RJREEpKQpAQCAtMjY5LDcgKzI2OSw3IEBACiAgKi8KIHZvaWQgdHNiX2luaXQoc3RydWN0IHRzYiAqdHNiKQogewotCW1lbXNldCh0c2IsIDAsIHNpemVvZih0c2IpKTsKKwltZW1zZXQodHNiLCAwLCBzaXplb2YoKnRzYikpOwogfQogRVhQT1JUX1NZTUJPTCh0c2JfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmggYi9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oCmluZGV4IGQ3MmFlNGMuLmI5Y2U3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaApAQCAtMTUwLDYgKzE1MCw3IEBACiAJc3RydWN0IGNjd19yZXF1ZXN0IHJlcTsJCS8qIGludGVybmFsIEkvTyByZXF1ZXN0ICovCiAJaW50IGlyZXRyeTsKIAl1OCBwZ2lkX3ZhbGlkX21hc2s7CQkvKiBtYXNrIG9mIHZhbGlkIFBHSURzICovCisJdTggcGdpZF90b2RvX21hc2s7CQkvKiBtYXNrIG9mIFBHSURzIHRvIGJlIGFkanVzdGVkICovCiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50IGZhc3Q6MTsJLyogcG9zdCB3aXRoICJjaGFubmVsIGVuZCIgKi8KIAkJdW5zaWduZWQgaW50IHJlcGFsbDoxOwkvKiByZXBvcnQgZXZlcnkgaW50ZXJydXB0IHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggNGJlNmU4NC4uYjIyNzVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00ODYsNyArNDg2LDggQEAKIAljYXNlIFNMU0JfUF9JTlBVVF9QUklNRUQ6CiAJCWluYm91bmRfcHJpbWVkKHEsIGNvdW50KTsKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7Ci0JCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpID09IDApCisJCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9xdWV1ZV9mdWxsKTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfSU5QVVRfRVJST1I6CiAJCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwppbmRleCA5NjhlM2M3Li41NGY3YzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKQEAgLTY0LDYgKzY0LDggQEAKIAkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5mYXN0X3JlcXVldWUpKTsKIAlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2Ygb3V0Ym91bmQgdGFyZ2V0IGZ1bGwgY29uZGl0aW9uXHQ6ICVsaVxuIiwKIAkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5vdXRib3VuZF90YXJnZXRfZnVsbCkpOworCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGZ1bGwgY29uZGl0aW9uXHRcdDogJWxpXG4iLAorCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmluYm91bmRfcXVldWVfZnVsbCkpOwogCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBvdXRib3VuZCB0YXNrbGV0IG1vZF90aW1lciBjYWxsc1x0OiAlbGlcbiIsCiAJCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZGVidWdfdGxfb3V0X3RpbWVyKSk7CiAJc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIHN0b3AgcG9sbGluZyBjYWxsc1x0XHRcdDogJWxpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmgKaW5kZXggZmY0NTA0Y2UuLjEyNDU0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaApAQCAtMzYsNiArMzYsNyBAQAogCWF0b21pY19sb25nX3Qgb3V0Ym91bmRfaGFuZGxlcjsKIAlhdG9taWNfbG9uZ190IGZhc3RfcmVxdWV1ZTsKIAlhdG9taWNfbG9uZ190IG91dGJvdW5kX3RhcmdldF9mdWxsOworCWF0b21pY19sb25nX3QgaW5ib3VuZF9xdWV1ZV9mdWxsOwogCiAJLyogZm9yIGRlYnVnZ2luZyAqLwogCWF0b21pY19sb25nX3QgZGVidWdfdGxfb3V0X3RpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCAxOGQ1NGZjLi44YzJkZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtNDgsNyArNDgsNiBAQAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuOwogCi0JV0FSTl9PTigodW5zaWduZWQgbG9uZykmaXJxX3B0ci0+cWliICYgMHhmZik7CiAJaXJxX3B0ci0+cWliLnBmbXQgPSBxaWJfcGFyYW1fZmllbGRfZm9ybWF0OwogCWlmIChxaWJfcGFyYW1fZmllbGQpCiAJCW1lbWNweShpcnFfcHRyLT5xaWIucGFybSwgcWliX3BhcmFtX2ZpZWxkLApAQCAtODIsMTQgKzgxLDEyIEBACiAJCXEgPSBrbWVtX2NhY2hlX2FsbG9jKHFkaW9fcV9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEgJiAweGZmKTsKIAogCQlxLT5zbGliID0gKHN0cnVjdCBzbGliICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFxLT5zbGliKSB7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpcS0+c2xpYiAmIDB4N2ZmKTsKIAkJaXJxX3B0cl9xc1tpXSA9IHE7CiAJfQogCXJldHVybiAwOwpAQCAtMTMxLDcgKzEyOCw3IEBACiAJLyogZmlsbCBpbiBzYmFsICovCiAJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGorKykgewogCQlxLT5zYmFsW2pdID0gKnNiYWxzX2FycmF5Kys7Ci0JCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXSAmIDB4ZmYpOworCQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXSAmIDB4ZmYpOwogCX0KIAogCS8qIGZpbGwgaW4gc2xpYiAqLwpAQCAtMTQ3LDExICsxNDQsNiBAQAogCS8qIGZpbGwgaW4gc2wgKi8KIAlmb3IgKGogPSAwOyBqIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgaisrKQogCQlxLT5zbC0+ZWxlbWVudFtqXS5zYmFsID0gKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXTsKLQotCURCRl9FVkVOVCgic2wtc2xzYi1zYmFsIik7Ci0JREJGX0hFWChxLT5zbCwgc2l6ZW9mKHZvaWQgKikpOwotCURCRl9IRVgoJnEtPnNsc2IsIHNpemVvZih2b2lkICopKTsKLQlEQkZfSEVYKHEtPnNiYWwsIHNpemVvZih2b2lkICopKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfcXVldWVzKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggYjc2ODlmMy4uYzI4YTcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCWlmIChjb25uLT5sb2dpbl90YXNrID09IHRhc2spCiAJCXJldHVybjsKIAotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CisJa2ZpZm9faW4oJnNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CiAKIAlpZiAoc2MpIHsKIAkJdGFzay0+c2MgPSBOVUxMOwpAQCAtNzM3LDcgKzczNyw3IEBACiAJCUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fSU5JVElBTF9TVEFHRSk7CiAJCUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fU1RPUFBFRCk7CiAKLQkJaWYgKCFfX2tmaWZvX2dldChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCQlpZiAoIWtmaWZvX291dCgmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKIAkJCQkgKHZvaWQqKSZ0YXNrLCBzaXplb2Yodm9pZCopKSkKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTE1NjcsNyArMTU2Nyw3IEBACiB7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7CiAKLQlpZiAoIV9fa2ZpZm9fZ2V0KGNvbm4tPnNlc3Npb24tPmNtZHBvb2wucXVldWUsCisJaWYgKCFrZmlmb19vdXQoJmNvbm4tPnNlc3Npb24tPmNtZHBvb2wucXVldWUsCiAJCQkgKHZvaWQgKikgJnRhc2ssIHNpemVvZih2b2lkICopKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI0NjEsMTIgKzI0NjEsNyBAQAogCWlmIChxLT5wb29sID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcS0+cXVldWUgPSBrZmlmb19pbml0KCh2b2lkKilxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCopLAotCQkJICAgICAgR0ZQX0tFUk5FTCwgTlVMTCk7Ci0JaWYgKElTX0VSUihxLT5xdWV1ZSkpIHsKLQkJcS0+cXVldWUgPSBOVUxMOwotCQlnb3RvIGVub21lbTsKLQl9CisJa2ZpZm9faW5pdCgmcS0+cXVldWUsICh2b2lkKilxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCopKTsKIAogCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewogCQlxLT5wb29sW2ldID0ga3phbGxvYyhpdGVtX3NpemUsIEdGUF9LRVJORUwpOwpAQCAtMjQ3NCw3ICsyNDY5LDcgQEAKIAkJCXEtPm1heCA9IGk7CiAJCQlnb3RvIGVub21lbTsKIAkJfQotCQlfX2tmaWZvX3B1dChxLT5xdWV1ZSwgKHZvaWQqKSZxLT5wb29sW2ldLCBzaXplb2Yodm9pZCopKTsKKwkJa2ZpZm9faW4oJnEtPnF1ZXVlLCAodm9pZCopJnEtPnBvb2xbaV0sIHNpemVvZih2b2lkKikpOwogCX0KIAogCWlmIChpdGVtcykgewpAQCAtMjQ5Nyw3ICsyNDkyLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcS0+bWF4OyBpKyspCiAJCWtmcmVlKHEtPnBvb2xbaV0pOwogCWtmcmVlKHEtPnBvb2wpOwotCWtmcmVlKHEtPnF1ZXVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Bvb2xfZnJlZSk7CiAKQEAgLTI4MjUsNyArMjgxOSw3IEBACiAKIAkvKiBhbGxvY2F0ZSBsb2dpbl90YXNrIHVzZWQgZm9yIHRoZSBsb2dpbi90ZXh0IHNlcXVlbmNlcyAqLwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JaWYgKCFfX2tmaWZvX2dldChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCWlmICgha2ZpZm9fb3V0KCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKIAkJCSBzaXplb2Yodm9pZCopKSkgewogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CkBAIC0yODQ1LDcgKzI4MzksNyBAQAogCXJldHVybiBjbHNfY29ubjsKIAogbG9naW5fdGFza19kYXRhX2FsbG9jX2ZhaWw6Ci0JX19rZmlmb19wdXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAorCWtmaWZvX2luKCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCiAJCSAgICBzaXplb2Yodm9pZCopKTsKIGxvZ2luX3Rhc2tfYWxsb2NfZmFpbDoKIAlpc2NzaV9kZXN0cm95X2Nvbm4oY2xzX2Nvbm4pOwpAQCAtMjkwOCw3ICsyOTAyLDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBjb25uLT5kYXRhLAogCQkgICBnZXRfb3JkZXIoSVNDU0lfREVGX01BWF9SRUNWX1NFR19MRU4pKTsKIAlrZnJlZShjb25uLT5wZXJzaXN0ZW50X2FkZHJlc3MpOwotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKKwlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAogCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJaWYgKHNlc3Npb24tPmxlYWRjb25uID09IGNvbm4pCiAJCXNlc3Npb24tPmxlYWRjb25uID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwppbmRleCBjYTI1ZWU1Li5kYjY4NTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCkBAIC00NDUsMTUgKzQ0NSwxNSBAQAogCQlyZXR1cm47CiAKIAkvKiBmbHVzaCB0YXNrJ3MgcjJ0IHF1ZXVlcyAqLwotCXdoaWxlIChfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKSkgewotCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCisJd2hpbGUgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSkpIHsKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLCAicGVuZGluZyByMnQgZHJvcHBlZFxuIik7CiAJfQogCiAJcjJ0ID0gdGNwX3Rhc2stPnIydDsKIAlpZiAocjJ0ICE9IE5VTEwpIHsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAogCQkJICAgIHNpemVvZih2b2lkKikpOwogCQl0Y3BfdGFzay0+cjJ0ID0gTlVMTDsKIAl9CkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmMgPSBfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOworCXJjID0ga2ZpZm9fb3V0KCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwogCWlmICghcmMpIHsKIAkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJDb3VsZCBub3QgYWxsb2NhdGUgUjJULiAiCiAJCQkJICAiVGFyZ2V0IGhhcyBzZW50IG1vcmUgUjJUcyB0aGFuIGl0ICIKQEAgLTU1NCw3ICs1NTQsNyBAQAogCWlmIChyMnQtPmRhdGFfbGVuZ3RoID09IDApIHsKIAkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCiAJCQkJICAiaW52YWxpZCBSMlQgd2l0aCB6ZXJvIGRhdGEgbGVuXG4iKTsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAogCQkJICAgIHNpemVvZih2b2lkKikpOwogCQlyZXR1cm4gSVNDU0lfRVJSX0RBVEFMRU47CiAJfQpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCQkJICAiaW52YWxpZCBSMlQgd2l0aCBkYXRhIGxlbiAldSBhdCBvZmZzZXQgJXUgIgogCQkJCSAgImFuZCB0b3RhbCBsZW5ndGggJWRcbiIsIHIydC0+ZGF0YV9sZW5ndGgsCiAJCQkJICByMnQtPmRhdGFfb2Zmc2V0LCBzY3NpX291dCh0YXNrLT5zYyktPmxlbmd0aCk7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwogCX0KQEAgLTU4MCw3ICs1ODAsNyBAQAogCXIydC0+c2VudCA9IDA7CiAKIAl0Y3BfdGFzay0+ZXhwX2RhdGFzbiA9IHIydHNuICsgMTsKLQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKKwlrZmlmb19pbigmdGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSk7CiAJY29ubi0+cjJ0X3BkdXNfY250Kys7CiAKIAlpc2NzaV9yZXF1ZXVlX3Rhc2sodGFzayk7CkBAIC05NTEsNyArOTUxLDcgQEAKIAkJcmV0dXJuIGNvbm4tPnNlc3Npb24tPnR0LT5pbml0X3BkdSh0YXNrLCAwLCB0YXNrLT5kYXRhX2NvdW50KTsKIAl9CiAKLQlCVUdfT04oX19rZmlmb19sZW4odGNwX3Rhc2stPnIydHF1ZXVlKSk7CisJQlVHX09OKGtmaWZvX2xlbigmdGNwX3Rhc2stPnIydHF1ZXVlKSk7CiAJdGNwX3Rhc2stPmV4cF9kYXRhc24gPSAwOwogCiAJLyogUHJlcGFyZSBQRFUsIG9wdGlvbmFsbHkgdy8gaW1tZWRpYXRlIGRhdGEgKi8KQEAgLTk4Miw3ICs5ODIsNyBAQAogCQkJaWYgKHIydC0+ZGF0YV9sZW5ndGggPD0gcjJ0LT5zZW50KSB7CiAJCQkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLAogCQkJCQkgICAgICAiICBkb25lIHdpdGggcjJ0ICVwXG4iLCByMnQpOwotCQkJCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLAorCQkJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwKIAkJCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsCiAJCQkJCSAgICBzaXplb2Yodm9pZCAqKSk7CiAJCQkJdGNwX3Rhc2stPnIydCA9IHIydCA9IE5VTEw7CkBAIC05OTAsOCArOTkwLDEzIEBACiAJCX0KIAogCQlpZiAocjJ0ID09IE5VTEwpIHsKLQkJCV9fa2ZpZm9fZ2V0KHRjcF90YXNrLT5yMnRxdWV1ZSwKLQkJCQkgICAgKHZvaWQgKikmdGNwX3Rhc2stPnIydCwgc2l6ZW9mKHZvaWQgKikpOworCQkJaWYgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLAorCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKSAhPQorCQkJICAgIHNpemVvZih2b2lkICopKSB7CisJCQkJV0FSTl9PTkNFKDEsICJ1bmV4cGVjdGVkIGZpZm8gc3RhdGUiKTsKKwkJCQlyMnQgPSBOVUxMOworCQkJfQorCiAJCQlyMnQgPSB0Y3BfdGFzay0+cjJ0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKQEAgLTExMjcsOSArMTEzMiw4IEBACiAJCX0KIAogCQkvKiBSMlQgeG1pdCBxdWV1ZSAqLwotCQl0Y3BfdGFzay0+cjJ0cXVldWUgPSBrZmlmb19hbGxvYygKLQkJICAgICAgc2Vzc2lvbi0+bWF4X3IydCAqIDQgKiBzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMLCBOVUxMKTsKLQkJaWYgKHRjcF90YXNrLT5yMnRxdWV1ZSA9PSBFUlJfUFRSKC1FTk9NRU0pKSB7CisJCWlmIChrZmlmb19hbGxvYygmdGNwX3Rhc2stPnIydHF1ZXVlLAorCQkgICAgICBzZXNzaW9uLT5tYXhfcjJ0ICogNCAqIHNpemVvZih2b2lkKiksIEdGUF9LRVJORUwpKSB7CiAJCQlpc2NzaV9wb29sX2ZyZWUoJnRjcF90YXNrLT5yMnRwb29sKTsKIAkJCWdvdG8gcjJ0X2FsbG9jX2ZhaWw7CiAJCX0KQEAgLTExNDIsNyArMTE0Niw3IEBACiAJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gc2Vzc2lvbi0+Y21kc1tpXTsKIAkJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFzayA9IHRhc2stPmRkX2RhdGE7CiAKLQkJa2ZpZm9fZnJlZSh0Y3BfdGFzay0+cjJ0cXVldWUpOworCQlrZmlmb19mcmVlKCZ0Y3BfdGFzay0+cjJ0cXVldWUpOwogCQlpc2NzaV9wb29sX2ZyZWUoJnRjcF90YXNrLT5yMnRwb29sKTsKIAl9CiAJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTU3LDcgKzExNjEsNyBAQAogCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07CiAJCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCi0JCWtmaWZvX2ZyZWUodGNwX3Rhc2stPnIydHF1ZXVlKTsKKwkJa2ZpZm9fZnJlZSgmdGNwX3Rhc2stPnIydHF1ZXVlKTsKIAkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNycC5jIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCmluZGV4IDlhZDM4ZTguLmFiMTliM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKQEAgLTU4LDE5ICs1OCwxNSBAQAogCQlnb3RvIGZyZWVfcG9vbDsKIAogCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKLQlxLT5xdWV1ZSA9IGtmaWZvX2luaXQoKHZvaWQgKikgcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQgKiksCi0JCQkgICAgICBHRlBfS0VSTkVMLCAmcS0+bG9jayk7Ci0JaWYgKElTX0VSUihxLT5xdWV1ZSkpCi0JCWdvdG8gZnJlZV9pdGVtOworCWtmaWZvX2luaXQoJnEtPnF1ZXVlLCAodm9pZCAqKSBxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCAqKSk7CiAKIAlmb3IgKGkgPSAwLCBpdWUgPSBxLT5pdGVtczsgaSA8IG1heDsgaSsrKSB7Ci0JCV9fa2ZpZm9fcHV0KHEtPnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJCWtmaWZvX2luKCZxLT5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOwogCQlpdWUtPnNidWYgPSByaW5nW2ldOwogCQlpdWUrKzsKIAl9CiAJcmV0dXJuIDA7CiAKLWZyZWVfaXRlbToKIAlrZnJlZShxLT5pdGVtcyk7CiBmcmVlX3Bvb2w6CiAJa2ZyZWUocS0+cG9vbCk7CkBAIC0xNjcsNyArMTYzLDExIEBACiB7CiAJc3RydWN0IGl1X2VudHJ5ICppdWUgPSBOVUxMOwogCi0Ja2ZpZm9fZ2V0KHRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsIHNpemVvZih2b2lkICopKTsKKwlpZiAoa2ZpZm9fb3V0X2xvY2tlZCgmdGFyZ2V0LT5pdV9xdWV1ZS5xdWV1ZSwgKHZvaWQgKikgJml1ZSwKKwkJc2l6ZW9mKHZvaWQgKiksICZ0YXJnZXQtPml1X3F1ZXVlLmxvY2spICE9IHNpemVvZih2b2lkICopKSB7CisJCQlXQVJOX09OQ0UoMSwgInVuZXhwZWN0ZWQgZmlmbyBzdGF0ZSIpOworCQkJcmV0dXJuIE5VTEw7CisJfQogCWlmICghaXVlKQogCQlyZXR1cm4gaXVlOwogCWl1ZS0+dGFyZ2V0ID0gdGFyZ2V0OwpAQCAtMTc5LDcgKzE3OSw4IEBACiAKIHZvaWQgc3JwX2l1X3B1dChzdHJ1Y3QgaXVfZW50cnkgKml1ZSkKIHsKLQlrZmlmb19wdXQoaXVlLT50YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJa2ZpZm9faW5fbG9ja2VkKCZpdWUtPnRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsCisJCQlzaXplb2Yodm9pZCAqKSwgJml1ZS0+dGFyZ2V0LT5pdV9xdWV1ZS5sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNycF9pdV9wdXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDY4YzdmNmMuLjM3ZjBkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0yMjIsOSArMjIyLDkgQEAKIAkJICAgU2V0IFNDUDZNRDEsMCA9IHswMX0gKG91dHB1dCkgICovCiAJCV9fcmF3X3dyaXRldygoZGF0YSAmIDB4MGZjZikgfCAweDEwMDAsIFNDUENSKTsKIAotCQlkYXRhID0gY3RybF9pbmIoU0NQRFIpOworCQlkYXRhID0gX19yYXdfcmVhZGIoU0NQRFIpOwogCQkvKiBTZXQgL1JUUzIgKGJpdDYpID0gMCAqLwotCQljdHJsX291dGIoZGF0YSAmIDB4YmYsIFNDUERSKTsKKwkJX19yYXdfd3JpdGViKGRhdGEgJiAweGJmLCBTQ1BEUik7CiAJfQogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQpAQCAtODk3LDExICs4OTcsMjEgQEAKIHN0YXRpYyB2b2lkIHNjaV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCiAJCQkgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0JdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBiYXVkLCBzbXJfdmFsLCBtYXhfYmF1ZDsKIAlpbnQgdCA9IC0xOwogCi0JYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwotCWlmIChsaWtlbHkoYmF1ZCkpCisJLyoKKwkgKiBlYXJseXByaW50ayBjb21lcyBoZXJlIGVhcmx5IG9uIHdpdGggcG9ydC0+dWFydGNsayBzZXQgdG8gemVyby4KKwkgKiB0aGUgY2xvY2sgZnJhbWV3b3JrIGlzIG5vdCB1cCBhbmQgcnVubmluZyBhdCB0aGlzIHBvaW50IHNvIGhlcmUKKwkgKiB3ZSBhc3N1bWUgdGhhdCAxMTUyMDAgaXMgdGhlIG1heGltdW0gYmF1ZCByYXRlLiBwbGVhc2Ugbm90ZSB0aGF0CisJICogdGhlIGJhdWQgcmF0ZSBpcyBub3QgcHJvZ3JhbW1lZCBkdXJpbmcgZWFybHlwcmludGsgLSBpdCBpcyBhc3N1bWVkCisJICogdGhhdCB0aGUgcHJldmlvdXMgYm9vdCBsb2FkZXIgaGFzIGVuYWJsZWQgcmVxdWlyZWQgY2xvY2tzIGFuZAorCSAqIHNldHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yIGhhcmR3YXJlIGZvciB1cyBhbHJlYWR5LgorCSAqLworCW1heF9iYXVkID0gcG9ydC0+dWFydGNsayA/IHBvcnQtPnVhcnRjbGsgLyAxNiA6IDExNTIwMDsKKworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBtYXhfYmF1ZCk7CisJaWYgKGxpa2VseShiYXVkICYmIHBvcnQtPnVhcnRjbGspKQogCQl0ID0gU0NCUlJfVkFMVUUoYmF1ZCwgcG9ydC0+dWFydGNsayk7CiAKIAlkbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IGEzMjA5NGVlLi4wZWZjZGVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTUxNywyMCArNTE3LDIwIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZmZmU4MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDAwMDE1MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTQwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYyKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCkBAIC01NTcsNjggKzU1Nyw2OCBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRjMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0ZDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBTRFIpICYgMHgwMiA/IDEgOiAwOyAvKiBTQ0lGMCAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFNEUikgJiAweDAyID8gMSA6IDA7IC8qIFNDSUYwICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBBRFIpICYgMHg0MCA/IDEgOiAwOyAvKiBTQ0lGMSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUEFEUikgJiAweDQwID8gMSA6IDA7IC8qIFNDSUYxICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBXRFIpICYgMHgwNCA/IDEgOiAwOyAvKiBTQ0lGMiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYyNiwxNyArNjI2LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlMzAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCiAgICAgICAgIHJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQpAQCAtNjQ1LDkgKzY0NSw5IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0ZTUikpICAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDRlNSKSkgICYgU0NJRl9CUksgPyAxIDogMDsKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0FTU1IpKSAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDQVNTUikpICYgU0NJRl9CUksgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCkBAIC02NjUsMTEgKzY2NSwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRi9JUkRBICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KIAogCXJldHVybiAxOwogfQpAQCAtNjc3LDIwICs2NzcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTIzMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjQwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKQEAgLTY5OCwxNyArNjk4LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVhMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYzAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVkMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWUwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZjAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpIHx8IFwKQEAgLTcxOCwyMiArNzE4LDIyIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4ODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTkwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUIwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNlbmRpZgogCXJldHVybiAxOwogfQpAQCAtNzQxLDI0ICs3NDEsMjQgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmMzMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzQwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM2MDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAwOTNmNTdhLi45NGViODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtODcsOCArODcsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kcmVhbS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyIKQEAgLTE0NSw1ICsxNDMsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMDY5ODY0Zi4uYjVlNjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNiBAQAogb2JqLSQoQ09ORklHX0lOUFVUX01JTUlPKQkrPSBtaW1pby8KIG9iai0kKENPTkZJR19UUkFOWlBPUlQpCQkrPSBmcm9udGllci8KIG9iai0kKENPTkZJR19EUkVBTSkJCSs9IGRyZWFtLwotb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwogb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwpAQCAtNTMsMyArNTIsNCBAQAogb2JqLSQoQ09ORklHX1dBVkVMQU4pCQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9XQVZFTEFOKQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9ORVRXQVZFKQkrPSBuZXR3YXZlLworb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwppbmRleCA3NjMyZjU3Li4xZDc0ZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIGNvbmZpZyBCQVRNQU5fQURWCiAJdHJpc3RhdGUgIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sIgorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBQQUNLRVQKICAgICAgICAgZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKaW5kZXggZDcyNDc5OC4uZWI2MTc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwpAQCAtMzYzLDggKzM2MywxMCBAQAogCQlyZXR1cm47CiAKIAlmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKHBhY2tldF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKQorCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKSB7CisJCWtmcmVlKGZvcndfcGFja2V0KTsKIAkJcmV0dXJuOworCX0KIAogCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuID0gcGFja2V0X2xlbjsKIAltZW1jcHkoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLCBwYWNrZXRfYnVmZiwgZm9yd19wYWNrZXQtPnBhY2tldF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKaW5kZXggY2NjNWNkYy4uYjU1OWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCkBAIC00NTEsNyArNDUxLDcgQEAKIAogI2RlZmluZSBDT01FRElfQ0JfRU9TCQkxCS8qIGVuZCBvZiBzY2FuICovCiAjZGVmaW5lIENPTUVESV9DQl9FT0EJCTIJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCi0jZGVmaW5lIENPTUVESV9DQl9CTE9DSwkJNAkvKiBERVBSRUNBVEVEOiBjb252ZW5pZW50IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ09NRURJX0NCX0JMT0NLCQk0CS8qIGRhdGEgaGFzIGFycml2ZWQ6IHdha2VzIHVwIHJlYWQoKSAvIHdyaXRlKCkgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VPQlVGCQk4CS8qIERFUFJFQ0FURUQ6IGVuZCBvZiBidWZmZXIgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VSUk9SCQkxNgkvKiBjYXJkIGVycm9yIGR1cmluZyBhY3F1aXNpdGlvbiAqLwogI2RlZmluZSBDT01FRElfQ0JfT1ZFUkZMT1cJMzIJLyogYnVmZmVyIG92ZXJmbG93L3VuZGVyZmxvdyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggMGQyYzJlYjIzLi5iZDM5Nzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTg0OSw4ICs4NDksMTEgQEAKIAl9CiAKIAlkZXZwcml2LT5wY2lfZW5hYmxlZCA9IDE7Ci0JZGV2cHJpdi0+aW9iYXNlID0KLQkgICAgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksIHNpemVvZihzdHJ1Y3QganIzX3QpKTsKKwlkZXZwcml2LT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwKKwkJCW9mZnNldG9mKHN0cnVjdCBqcjNfdCwgY2hhbm5lbFtkZXZwcml2LT5uX2NoYW5uZWxzXSkpOworCWlmICghZGV2cHJpdi0+aW9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXZwcml2LT5uX2NoYW5uZWxzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggMDZjMDIwNDYuLjlhMWI1NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKQEAgLTEsNCArMSw0IEBACi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4zIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuNCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQmVybmQgUG9yciwgQmVybmRQb3JyQGYycy5jb20iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJTdGlybGluZy9JVEwgVVNCLURVWCAtLSBCZXJuZC5Qb3JyQGYycy5jb20iCiAvKgpAQCAtODEsNiArODEsOCBAQAogICogMi4xOiAgY2hhbmdlZCBQV00gQVBJCiAgKiAyLjI6ICBhZGRlZCBmaXJtd2FyZSBrZXJuZWwgcmVxdWVzdCB0byBmaXggYW4gdWRldiBwcm9ibGVtCiAgKiAyLjM6ICBjb3JyZWN0ZWQgYSBidWcgaW4gYnVsayB0aW1lb3V0cyB3aGljaCB3ZXJlIGZhciB0b28gc2hvcnQKKyAqIDIuNDogIGZpeGVkIGEgYnVnIHdoaWNoIGNhdXNlcyB0aGUgZHJpdmVyIHRvIGhhbmcgd2hlbiBpdCByYW4gb3V0IG9mIGRhdGEuCisgKiAgICAgICBUaGFua3MgdG8gSmFuLU1hdHRoaWFzIEJyYXVuIGFuZCBJYW4gdG8gc3BvdCB0aGUgYnVnIGFuZCBmaXggaXQuCiAgKgogICovCiAKQEAgLTUzMiw2ICs1MzQsNyBAQAogCQl9CiAJfQogCS8qIHRlbGwgY29tZWRpIHRoYXQgZGF0YSBpcyB0aGVyZSAqLworCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPUzsKIAljb21lZGlfZXZlbnQodGhpc191c2JkdXhzdWItPmNvbWVkaWRldiwgcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ4ZDM0Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1jb25maWcgRFNUCi0JdHJpc3RhdGUgIkRpc3RyaWJ1dGVkIHN0b3JhZ2UiCi0JZGVwZW5kcyBvbiBORVQgJiYgQ1JZUFRPICYmIFNZU0ZTICYmIEJMS19ERVYKLQlzZWxlY3QgQ09OTkVDVE9SCi0JLS0taGVscC0tLQotCURTVCBpcyBhIG5ldHdvcmsgYmxvY2sgZGV2aWNlIHN0b3JhZ2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9yZ2FuaXplCi0JZXhwb3J0ZWQgc3RvcmFnZSBvbiB0aGUgcmVtb3RlIG5vZGVzIGludG8gdGhlIGxvY2FsIGJsb2NrIGRldmljZS4KLQotCURTVCB3b3JrcyBvbiB0b3Agb2YgYW55IG5ldHdvcmsgbWVkaWEgYW5kIHByb3RvY29sOyBpdCBpcyBqdXN0IGEgbWF0dGVyCi0Jb2YgY29uZmlndXJhdGlvbiB1dGlsaXR5IHRvIHVuZGVyc3RhbmQgdGhlIGNvcnJlY3QgYWRkcmVzc2VzLiBUaGUgbW9zdAotCWNvbW1vbiBleGFtcGxlIGlzIFRDUCBvdmVyIElQLCB3aGljaCBhbGxvd3MgdG8gcGFzcyB0aHJvdWdoIGZpcmV3YWxscyBhbmQKLQljcmVhdGUgcmVtb3RlIGJhY2t1cCBzdG9yYWdlIGluIGEgZGlmZmVyZW50IGRhdGFjZW50ZXIuIERTVCByZXF1aXJlcwotCXNpbmdsZSBwb3J0IHRvIGJlIGVuYWJsZWQgb24gdGhlIGV4cG9ydGluZyBub2RlIGFuZCBvdXRnb2luZyBjb25uZWN0aW9ucwotCW9uIHRoZSBsb2NhbCBub2RlLgotCi0JRFNUIHdvcmtzIHdpdGggaW4ta2VybmVsIGNsaWVudCBhbmQgc2VydmVyLCB3aGljaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieQotCWVsaW1pbmF0aW5nIHVubmVkZWQgZGF0YSBjb3BpZXMgYW5kIGJ5IG5vdCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24KLQlvZiB0aGUgZXh0ZXJuYWwgSU8gY29tcG9uZW50cy4gSXQgcmVxdWlyZXMgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gdXRpbGl0eQotCXRob3VnaC4KLQotCURTVCB1c2VzIHRyYW5zYWN0aW9uIG1vZGVsLCB3aGVuIGVhY2ggc3RvcmUgaGFzIHRvIGJlIGV4cGxpY2l0bHkgYWNrZWQKLQlmcm9tIHRoZSByZW1vdGUgbm9kZSB0byBiZSBjb25zaWRlcmVkIGFzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiBUaGVyZQotCW1heSBiZSBsb3RzIG9mIGluLWZsaWdodCB0cmFuc2FjdGlvbnMuIFdoZW4gcmVtb3RlIGhvc3QgZG9lcyBub3QgYWNrCi0JdGhlIHRyYW5zYWN0aW9uIGl0IHdpbGwgYmUgcmVzZW50IHByZWRlZmluZWQgbnVtYmVyIG9mIHRpbWVzIHdpdGggc3BlY2lmaWVkCi0JdGltZW91dHMgYmV0d2VlbiB0aGVtLiBBbGwgdGhvc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlLiBUcmFuc2FjdGlvbnMKLQlhcmUgbWFya2VkIGFzIGZhaWxlZCBhZnRlciBhbGwgcmVzZW5kcyBjb21wbGV0ZSB1bnN1Y2Nlc3NmdWxseTsgaGF2aW5nCi0JbG9uZyBlbm91Z2ggcmVzZW5kIHRpbWVvdXQgYW5kL29yIGxhcmdlIG51bWJlciBvZiByZXNlbmRzIGFsbG93cyBub3QgdG8KLQlyZXR1cm4gZXJyb3IgdG8gdGhlIGhpZ2hlciAoRlMgdXN1YWxseSkgbGF5ZXIgaW4gY2FzZSBvZiBzaG9ydCBuZXR3b3JrCi0JcHJvYmxlbXMgb3IgcmVtb3RlIG5vZGUgb3V0YWdlcy4gSW4gY2FzZSBvZiBuZXR3b3JrIFJBSUQgc2V0dXAgdGhpcyBtZWFucwotCXRoYXQgc3RvcmFnZSB3aWxsIG5vdCBkZWdyYWRlIHVudGlsIHRyYW5zYWN0aW9ucyBhcmUgbWFya2VkIGFzIGZhaWxlZCwgYW5kCi0JdGh1cyB3aWxsIG5vdCBmb3JjZSBjaGVja3N1bSByZWNhbGN1bGF0aW9uIGFuZCBkYXRhIHJlYnVpbGQuIEluIGNhc2Ugb2YKLQljb25uZWN0aW9uIGZhaWx1cmUgRFNUIHdpbGwgdHJ5IHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIG5vZGUgYXV0b21hdGljYWxseS4KLQlEU1Qgc2VuZHMgcGluZyBjb21tYW5kcyBhdCBpZGxlIHRpbWUgdG8gZGV0ZWN0IGlmIHJlbW90ZSBub2RlIGlzIGFsaXZlLgotCi0JQmVjYXVzZSBvZiB0cmFuc2FjdGlvbmFsIG1vZGVsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB6ZXJvLWNvcHkgc2VuZGluZwotCXdpdGhvdXQgd29ycnkgb2YgZGF0YSBjb3JydXB0aW9uICh3aGljaCBpbiB0dXJuIGNvdWxkIGJlIGRldGVjdGVkIGJ5IHRoZQotCXN0cm9uZyBjaGVja3N1bXMgdGhvdWdoKS4KLQotCURTVCBtYXkgZnVsbHkgZW5jcnlwdCB0aGUgZGF0YSBjaGFubmVsIGluIGNhc2Ugb2YgdW50cnVzdGVkIGNoYW5uZWwgYW5kIGltcGxlbWVudAotCXN0cm9uZyBjaGVja3N1bSBvZiB0aGUgdHJhbnNmZXJyZWQgZGF0YS4gSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGFsZ29yaXRobXMKLQlhbmQgY3J5cHRvIGtleXM7IHRoZXkgc2hvdWxkIG1hdGNoIG9uIGJvdGggc2lkZXMgb2YgdGhlIG5ldHdvcmsgY2hhbm5lbC4KLQlDcnlwdG8gcHJvY2Vzc2luZyBkb2VzIG5vdCBpbnRyb2R1Y2Ugbm90aWNlYmxlIHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBzaW5jZSBEU1QKLQl1c2VzIGNvbmZpZ3VyYWJsZSBwb29sIG9mIHRocmVhZHMgdG8gcGVyZm9ybSBjcnlwdG8gcHJvY2Vzc2luZy4KLQotCURTVCB1dGlsaXplcyBtZW1vcnkgcG9vbCBtb2RlbCBvZiBhbGwgaXRzIHRyYW5zYWN0aW9uIGFsbG9jYXRpb25zIChpdCBpcyB0aGUKLQlvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBvbiB0aGUgY2xpZW50KSBhbmQgc2VydmVyIGFsbG9jYXRpb25zIChiaW8gcG9vbHMsCi0Jd2hpbGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzbGFiKS4KLQotCUF0IHN0YXJ0dXAgRFNUIHBlcmZvcm1zIGEgc2ltcGxlIG5lZ290aWF0aW9uIHdpdGggdGhlIGV4cG9ydCBub2RlIHRvIGRldGVybWluZQotCWFjY2VzcyBwZXJtaXNzaW9ucyBhbmQgc2l6ZSBvZiB0aGUgZXhwb3J0ZWQgc3RvcmFnZS4gSXQgY2FuIGJlIGV4dGVuZGVkIGlmCi0JbmV3IHBhcmFtZXRlcnMgc2hvdWxkIGJlIGF1dG9uZWdvdGlhdGVkLgotCi0JRFNUIGNhcnJpZXMgYmxvY2sgSU8gZmxhZ3MgaW4gdGhlIHByb3RvY29sLCB3aGljaCBhbGxvd3MgdG8gdHJhbnNwYXJlbnRseSBpbXBsZW1lbnQKLQliYXJyaWVycyBhbmQgc3luYy9mbHVzaCBvcGVyYXRpb25zLiBUaG9zZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgZXhwb3J0IG5vZGUgd2hlcmUKLQlJTyBhZ2FpbnN0IHRoZSBsb2NhbCBzdG9yYWdlIGlzIHBlcmZvcm1lZCwgd2hpY2ggbWVhbnMgdGhhdCBzeW5jIHdyaXRlIHdpbGwgYmUgc3luYwotCW9uIHRoZSByZW1vdGUgbm9kZSB0b28sIHdoaWNoIGluIHR1cm4gaW1wcm92ZXMgZGF0YSBpbnRlZ3JpdHkgYW5kIGltcHJvdmVkIHJlc2lzdGFuY2UKLQl0byBlcnJvcnMgYW5kIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgcG93ZXIgb3V0YWdlcyBvciBzdG9yYWdlIGRhbWFnZXMuCi0KLQlIb21lcGFnZTogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9wcm9qZWN0cy9kc3QKLQlVc2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCB0aGUgbGF0ZXN0IHJlbGVhc2VzOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L2FyY2hpdmUvZHN0LwotCi1jb25maWcgRFNUX0RFQlVHCi0JYm9vbCAiRFNUIGRlYnVnIgotCWRlcGVuZHMgb24gRFNUCi0JLS0taGVscC0tLQotCVRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIEhFQVZZIGRlYnVnZ2luZyBvZiB0aGUgRFNULgotCVR1cm4gaXQgb24gT05MWSBpZiB5b3UgaGF2ZSB0byBkZWJ1ZyBzb21lIHJlYWxseSBvYnNjdXJlIHByb2JsZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4YjBjZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vYmotJChDT05GSUdfRFNUKSArPSBuc3QubwotCi1uc3QteSA6PSBkY29yZS5vIHN0YXRlLm8gZXhwb3J0Lm8gdGhyZWFkX3Bvb2wubyBjcnlwdG8ubyB0cmFucy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9jcnlwdG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxMjk1Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMzICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyoKLSAqIFRyaWNreSBiYXN0YXJkLCBidXQgSVYgY2FuIGJlIG1vcmUgY29tcGxleCB3aXRoIHRpbWUuLi4KLSAqLwotc3RhdGljIGlubGluZSB1NjQgZHN0X2dlbl9pdihzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCXJldHVybiB0LT5nZW47Ci19Ci0KLS8qCi0gKiBDcnlwdG8gbWFjaGluZXJ5OiBoYXNoL2NpcGhlciBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gY3J5cHRvIGNvbnRyb2xzLgotICovCi1zdGF0aWMgc3RydWN0IGNyeXB0b19oYXNoICpkc3RfaW5pdF9oYXNoKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsLCB1OCAqa2V5KQotewotCWludCBlcnI7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpoYXNoOwotCi0JaGFzaCA9IGNyeXB0b19hbGxvY19oYXNoKGN0bC0+aGFzaF9hbGdvLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKLQlpZiAoSVNfRVJSKGhhc2gpKSB7Ci0JCWVyciA9IFBUUl9FUlIoaGFzaCk7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5oYXNoX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWN0bC0+Y3J5cHRvX2F0dGFjaGVkX3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGhhc2gpOwotCi0JaWYgKCFjdGwtPmhhc2hfa2V5c2l6ZSkKLQkJcmV0dXJuIGhhc2g7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9zZXRrZXkoaGFzaCwga2V5LCBjdGwtPmhhc2hfa2V5c2l6ZSk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHNldCBrZXkgZm9yIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+aGFzaF9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQlyZXR1cm4gaGFzaDsKLQotZXJyX291dF9mcmVlOgotCWNyeXB0b19mcmVlX2hhc2goaGFzaCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZHN0X2luaXRfY2lwaGVyKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsLAotCQl1OCAqa2V5KQotewotCWludCBlcnIgPSAtRUlOVkFMOwotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyOwotCi0JaWYgKCFjdGwtPmNpcGhlcl9rZXlzaXplKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWNpcGhlciA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKGN0bC0+Y2lwaGVyX2FsZ28sIDAsIDApOwotCWlmIChJU19FUlIoY2lwaGVyKSkgewotCQllcnIgPSBQVFJfRVJSKGNpcGhlcik7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmNpcGhlcl9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQljcnlwdG9fYWJsa2NpcGhlcl9jbGVhcl9mbGFncyhjaXBoZXIsIH4wKTsKLQotCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX3NldGtleShjaXBoZXIsIGtleSwgY3RsLT5jaXBoZXJfa2V5c2l6ZSk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHNldCBrZXkgZm9yIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5jaXBoZXJfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0JcmV0dXJuIGNpcGhlcjsKLQotZXJyX291dF9mcmVlOgotCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY2lwaGVyKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi0vKgotICogQ3J5cHRvIGVuZ2luZSBoYXMgYSBwb29sIG9mIHBhZ2VzIHRvIGVuY3J5cHQgZGF0YSBpbnRvIGJlZm9yZSBzZW5kaW5nCi0gKiBpdCBvdmVyIHRoZSBuZXR3b3JrLiBUaGlzIHBvb2wgaXMgZnJlZWQvYWxsb2NhdGVkIGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fcGFnZXNfZnJlZShzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZS0+cGFnZV9udW07ICsraSkKLQkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOwotCWtmcmVlKGUtPnBhZ2VzKTsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHRvX3BhZ2VzX2FsbG9jKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwgaW50IG51bSkKLXsKLQlpbnQgaTsKLQotCWUtPnBhZ2VzID0ga21hbGxvYyhudW0gKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWUtPnBhZ2VzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotCQllLT5wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghZS0+cGFnZXNbaV0pCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKLQl9Ci0KLQllLT5wYWdlX251bSA9IG51bTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlX3BhZ2VzOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOwotCi0Ja2ZyZWUoZS0+cGFnZXMpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlLgotICogU2V0dXAgY2lwaGVyL2hhc2gsIGtleXMsIHBvb2wgb2YgdGhyZWFkcyBhbmQgcHJpdmF0ZSBkYXRhLgotICovCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fZW5naW5lX2luaXQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCA9ICZuLT5jcnlwdG87Ci0KLQllcnIgPSBkc3RfY3J5cHRvX3BhZ2VzX2FsbG9jKGUsIG4tPm1heF9wYWdlcyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQllLT5zaXplID0gUEFHRV9TSVpFOwotCWUtPmRhdGEgPSBrbWFsbG9jKGUtPnNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZS0+ZGF0YSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKLQl9Ci0KLQlpZiAoY3RsLT5oYXNoX2FsZ29bMF0pIHsKLQkJZS0+aGFzaCA9IGRzdF9pbml0X2hhc2goY3RsLCBuLT5oYXNoX2tleSk7Ci0JCWlmIChJU19FUlIoZS0+aGFzaCkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZS0+aGFzaCk7Ci0JCQllLT5oYXNoID0gTlVMTDsKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCQl9Ci0JfQotCi0JaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0pIHsKLQkJZS0+Y2lwaGVyID0gZHN0X2luaXRfY2lwaGVyKGN0bCwgbi0+Y2lwaGVyX2tleSk7Ci0JCWlmIChJU19FUlIoZS0+Y2lwaGVyKSkgewotCQkJZXJyID0gUFRSX0VSUihlLT5jaXBoZXIpOwotCQkJZS0+Y2lwaGVyID0gTlVMTDsKLQkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlX2hhc2g6Ci0JY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZShlLT5kYXRhKTsKLWVycl9vdXRfZnJlZV9wYWdlczoKLQlkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19lbmdpbmVfZXhpdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUpCi17Ci0JaWYgKGUtPmhhc2gpCi0JCWNyeXB0b19mcmVlX2hhc2goZS0+aGFzaCk7Ci0JaWYgKGUtPmNpcGhlcikKLQkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihlLT5jaXBoZXIpOwotCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKLQlrZnJlZShlLT5kYXRhKTsKLX0KLQotLyoKLSAqIFdhaXRpbmcgZm9yIGNpcGhlciBwcm9jZXNzaW5nIHRvIGJlIGNvbXBsZXRlZC4KLSAqLwotc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiB7Ci0Jc3RydWN0IGNvbXBsZXRpb24JCWNvbXBsZXRlOwotCWludAkJCQllcnJvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fY29tcGxldGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiAqYyA9IHJlcS0+ZGF0YTsKLQotCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQotCQlyZXR1cm47Ci0KLQlkcHJpbnRrKCIlczogcmVxOiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCByZXEsIGVycik7Ci0JYy0+ZXJyb3IgPSBlcnI7Ci0JY29tcGxldGUoJmMtPmNvbXBsZXRlKTsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Moc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMsCi0JCXZvaWQgKml2LCBpbnQgZW5jLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiBjOwotCWludCBlcnI7Ci0KLQlpbml0X2NvbXBsZXRpb24oJmMuY29tcGxldGUpOwotCWMuZXJyb3IgPSAtRUlOUFJPR1JFU1M7Ci0KLQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCi0JCQkJCWRzdF9jcnlwdG9fY29tcGxldGUsICZjKTsKLQotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZ19zcmMsIHNnX2RzdCwgc2dfc3JjLT5sZW5ndGgsIGl2KTsKLQotCWlmIChlbmMpCi0JCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKTsKLQllbHNlCi0JCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQocmVxKTsKLQotCXN3aXRjaCAoZXJyKSB7Ci0JY2FzZSAtRUlOUFJPR1JFU1M6Ci0JY2FzZSAtRUJVU1k6Ci0JCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjLmNvbXBsZXRlLAotCQkJCXRpbWVvdXQpOwotCQlpZiAoIWVycikKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCWVsc2UKLQkJCWVyciA9IGMuZXJyb3I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBEU1QgdXNlcyBnZW5lcmljIGl0ZXJhdGlvbiBhcHByb2FjaCBmb3IgZGF0YSBjcnlwdG8gcHJvY2Vzc2luZy4KLSAqIFNpbmdsZSBibG9jayBJTyByZXF1ZXN0IGlzIHN3aXRjaGVkIGludG8gYXJyYXkgb2Ygc2NhdHRlcmxpc3RzLAotICogd2hpY2ggYXJlIHN1Ym1pdHRlZCB0byB0aGUgY3J5cHRvIHByb2Nlc3NpbmcgaXRlcmF0b3IuCi0gKgotICogSW5wdXQgYW5kIG91dHB1dCBpdGVyYXRvciBpbml0aWFsaXphdGlvbiBhcmUgZGlmZmVyZW50LCBzaW5jZQotICogaW4gb3V0cHV0IGNhc2Ugd2UgY2FuIG5vdCBlbmNyeXB0IGRhdGEgaW4tcGxhY2UgYW5kIG5lZWQgYQotICogdGVtcG9yYXJ5IHN0b3JhZ2UsIHdoaWNoIGlzIHRoZW4gYmVpbmcgc2VudCB0byB0aGUgcmVtb3RlIHBlZXIuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2l0ZXJfb3V0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlpbnQgKCppdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgZXJyLCBpOwotCi0Jc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7Ci0Jc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgZS0+cGFnZXNbaV0sIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9pbihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJaW50ICgqaXRlcmF0b3IpIChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjKSkKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGVyciwgaTsKLQotCXNnX2luaXRfdGFibGUoZS0+c3JjLCBiaW8tPmJpX3ZjbnQpOwotCXNnX2luaXRfdGFibGUoZS0+ZHN0LCBiaW8tPmJpX3ZjbnQpOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlzZ19zZXRfcGFnZSgmZS0+c3JjW2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0JCXNnX3NldF9wYWdlKCZlLT5kc3RbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQotCQllcnIgPSBpdGVyYXRvcihlLCAmZS0+ZHN0W2ldLCAmZS0+c3JjW2ldKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2NyeXB0X2l0ZXJhdG9yKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQotewotCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGUtPmRhdGE7Ci0JdTggaXZbMzJdOwotCi0JbWVtc2V0KGl2LCAwLCBzaXplb2YoaXYpKTsKLQotCW1lbWNweShpdiwgJmUtPml2LCBzaXplb2YoZS0+aXYpKTsKLQotCXJldHVybiBkc3RfY3J5cHRvX3Byb2Nlc3MocmVxLCBzZ19kc3QsIHNnX3NyYywgaXYsIGUtPmVuYywgZS0+dGltZW91dCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2NyeXB0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGUtPmRhdGE7Ci0KLQltZW1zZXQocmVxLCAwLCBzaXplb2Yoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCkpOwotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKHJlcSwgZS0+Y2lwaGVyKTsKLQotCWlmIChlLT5lbmMpCi0JCXJldHVybiBkc3RfdHJhbnNfaXRlcl9vdXQoYmlvLCBlLCBkc3RfY3J5cHRfaXRlcmF0b3IpOwotCWVsc2UKLQkJcmV0dXJuIGRzdF90cmFuc19pdGVyX2luKGJpbywgZSwgZHN0X2NyeXB0X2l0ZXJhdG9yKTsKLX0KLQotc3RhdGljIGludCBkc3RfaGFzaF9pdGVyYXRvcihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKLXsKLQlyZXR1cm4gY3J5cHRvX2hhc2hfdXBkYXRlKGUtPmRhdGEsIHNnX3NyYywgc2dfc3JjLT5sZW5ndGgpOwotfQotCi1zdGF0aWMgaW50IGRzdF9oYXNoKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwgc3RydWN0IGJpbyAqYmlvLCB2b2lkICpkc3QpCi17Ci0Jc3RydWN0IGhhc2hfZGVzYyAqZGVzYyA9IGUtPmRhdGE7Ci0JaW50IGVycjsKLQotCWRlc2MtPnRmbSA9IGUtPmhhc2g7Ci0JZGVzYy0+ZmxhZ3MgPSAwOwotCi0JZXJyID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZHN0X3RyYW5zX2l0ZXJfaW4oYmlvLCBlLCBkc3RfaGFzaF9pdGVyYXRvcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIGRzdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSW5pdGlhbGl6ZS9jbGVhbnVwIGEgY3J5cHRvIHRocmVhZC4gVGhlIG9ubHkgdGhpbmcgaXQgc2hvdWxkCi0gKiBkbyBpcyB0byBhbGxvY2F0ZSBhIHBvb2wgb2YgcGFnZXMgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UuCi0gKiBBbmQgdG8gc2V0dXAgY2lwaGVyIGFuZC9vciBoYXNoLgotICovCi1zdGF0aWMgdm9pZCAqZHN0X2NyeXB0b190aHJlYWRfaW5pdCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGRhdGE7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSksIEdGUF9LRVJORUwpOwotCWlmICghZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JZS0+c3JjID0ga2NhbGxvYygyICogbi0+bWF4X3BhZ2VzLCBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZS0+c3JjKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWUtPmRzdCA9IGUtPnNyYyArIG4tPm1heF9wYWdlczsKLQotCWVyciA9IGRzdF9jcnlwdG9fZW5naW5lX2luaXQoZSwgbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWVfYWxsOwotCi0JcmV0dXJuIGU7Ci0KLWVycl9vdXRfZnJlZV9hbGw6Ci0Ja2ZyZWUoZS0+c3JjKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZShlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX3RocmVhZF9jbGVhbnVwKHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gcHJpdmF0ZTsKLQotCWRzdF9jcnlwdG9fZW5naW5lX2V4aXQoZSk7Ci0Ja2ZyZWUoZS0+c3JjKTsKLQlrZnJlZShlKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY3J5cHRvIGVuZ2luZSBmb3IgZ2l2ZW4gbm9kZTogc3RvcmUga2V5cywgY3JlYXRlIHBvb2wKLSAqIG9mIHRocmVhZHMsIGluaXRpYWxpemUgZWFjaCBvbmUuCi0gKgotICogRWFjaCB0aHJlYWQgaGFzIHVuaXF1ZSBJRCwgYnV0IDAgYW5kIDEgYXJlIHJlc2VydmVkIGZvciByZWNlaXZpbmcgYW5kCi0gKiBhY2NlcHRpbmcgdGhyZWFkcyAoaWYgZXhwb3J0IG5vZGUpLCBzbyBJRHMgY291bGQgc3RhcnQgZnJvbSAyLCBidXQgc3RhcnRpbmcKLSAqIHRoZW0gZnJvbSAxMCBhbGxvd3MgZWFzaWx5IHVuZGVyc3RhbmQgd2hhdCB0aGlzIHRocmVhZCBpcyBmb3IuCi0gKi8KLWludCBkc3Rfbm9kZV9jcnlwdG9faW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsKQotewotCXZvaWQgKmtleSA9IChjdGwgKyAxKTsKLQlpbnQgZXJyID0gLUVOT01FTSwgaTsKLQljaGFyIG5hbWVbMzJdOwotCi0JaWYgKGN0bC0+aGFzaF9rZXlzaXplKSB7Ci0JCW4tPmhhc2hfa2V5ID0ga21hbGxvYyhjdGwtPmhhc2hfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbi0+aGFzaF9rZXkpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQkJbWVtY3B5KG4tPmhhc2hfa2V5LCBrZXksIGN0bC0+aGFzaF9rZXlzaXplKTsKLQl9Ci0KLQlpZiAoY3RsLT5jaXBoZXJfa2V5c2l6ZSkgewotCQluLT5jaXBoZXJfa2V5ID0ga21hbGxvYyhjdGwtPmNpcGhlcl9rZXlzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuLT5jaXBoZXJfa2V5KQotCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKLQkJbWVtY3B5KG4tPmNpcGhlcl9rZXksIGtleSwgY3RsLT5jaXBoZXJfa2V5c2l6ZSk7Ci0JfQotCW1lbWNweSgmbi0+Y3J5cHRvLCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjdGwtPnRocmVhZF9udW07ICsraSkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy1jcnlwdG8tJWQiLCBuLT5uYW1lLCBpKTsKLQkJLyogVW5pcXVlIGlkcy4uLiAqLwotCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKG4tPnBvb2wsIG5hbWUsIGkgKyAxMCwKLQkJCWRzdF9jcnlwdG9fdGhyZWFkX2luaXQsIGRzdF9jcnlwdG9fdGhyZWFkX2NsZWFudXAsIG4pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfdGhyZWFkczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlX3RocmVhZHM6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQl0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKG4tPnBvb2wsIGkrMTApOwotCi0JaWYgKGN0bC0+Y2lwaGVyX2tleXNpemUpCi0JCWtmcmVlKG4tPmNpcGhlcl9rZXkpOwotCWN0bC0+Y2lwaGVyX2tleXNpemUgPSAwOwotZXJyX291dF9mcmVlX2hhc2g6Ci0JaWYgKGN0bC0+aGFzaF9rZXlzaXplKQotCQlrZnJlZShuLT5oYXNoX2tleSk7Ci0JY3RsLT5oYXNoX2tleXNpemUgPSAwOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZHN0X25vZGVfY3J5cHRvX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKLQotCWlmIChjdGwtPmNpcGhlcl9hbGdvWzBdIHx8IGN0bC0+aGFzaF9hbGdvWzBdKSB7Ci0JCWtmcmVlKG4tPmhhc2hfa2V5KTsKLQkJa2ZyZWUobi0+Y2lwaGVyX2tleSk7Ci0JfQotfQotCi0vKgotICogVGhyYWQgcG9vbCBzZXR1cCBjYWxsYmFjay4gSnVzdCBzdG9yZXMgYSB0cmFuc2FjdGlvbiBpbiBwcml2YXRlIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2NyeXB0b19zZXR1cCh2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICp0cmFucykKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOwotCi0JZS0+cHJpdmF0ZSA9IHRyYW5zOwotCXJldHVybiAwOwotfQotCi0jaWYgMAotc3RhdGljIHZvaWQgZHN0X2R1bXBfYmlvKHN0cnVjdCBiaW8gKmJpbykKLXsKLQl1OCAqcDsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCWRwcmludGsoIiVzOiAlbGx1LyV1OiBzaXplOiAldSwgb2Zmc2V0OiAldSwgZGF0YTogIiwKLQkJCQlfX2Z1bmNfXywgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCQlidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQotCQlwID0ga21hcChidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OwotCQlmb3IgKGkgPSAwOyBpIDwgYnYtPmJ2X2xlbjsgKytpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUwMnggIiwgcFtpXSk7Ci0JCWt1bm1hcChidi0+YnZfcGFnZSk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEVuY3J5cHQvaGFzaCBkYXRhIGFuZCBzZW5kIGl0IHRvIHRoZSBuZXR3b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2Vzc19zZW5kaW5nKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IGJpbyAqYmlvLCB1OCAqaGFzaCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKGUtPmNpcGhlcikgewotCQllcnIgPSBkc3RfY3J5cHQoZSwgYmlvKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWlmIChlLT5oYXNoKSB7Ci0JCWVyciA9IGRzdF9oYXNoKGUsIGJpbywgaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotI2lmZGVmIENPTkZJR19EU1RfREVCVUcKLQkJewotCQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJCS8qIGRzdF9kdW1wX2JpbyhiaW8pOyAqLwotCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgaGFzaDogIiwKLQkJCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwKLQkJCQliaW8tPmJpX3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOyArK2kpCi0JCQkJCXByaW50aygiJTAyeCAiLCBoYXNoW2ldKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotI2VuZGlmCi0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQ2hlY2sgaWYgcmVjZWl2ZWQgZGF0YSBpcyB2YWxpZC4gRGVjaXBoZXIgaWYgaXQgaXMuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gsIHU4ICpyZWN2X2hhc2gpCi17Ci0JaW50IGVycjsKLQotCWlmIChlLT5oYXNoKSB7Ci0JCWludCBtaXNtYXRjaDsKLQotCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJbWlzbWF0Y2ggPSAhIW1lbWNtcChyZWN2X2hhc2gsIGhhc2gsCi0JCQkJY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKSk7Ci0jaWZkZWYgQ09ORklHX0RTVF9ERUJVRwotCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KLQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgaGFzaCBtaXNtYXRjaDogJWQiLAotCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCWJpb19kYXRhX2RpcihiaW8pLCBtaXNtYXRjaCk7Ci0JCWlmIChtaXNtYXRjaCkgewotCQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJCXByaW50aygiLCByZWN2L2NhbGM6ICIpOwotCQkJZm9yIChpID0gMDsgaSA8IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkKLQkJCQlwcmludGsoIiUwMngvJTAyeCAiLCByZWN2X2hhc2hbaV0sIGhhc2hbaV0pOwotCi0JCX0KLQkJcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0JCWVyciA9IC0xOwotCQlpZiAobWlzbWF0Y2gpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlpZiAoZS0+Y2lwaGVyKSB7Ci0JCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogVGhyZWFkIHBvb2wgY2FsbGJhY2sgdG8gZW5jcnlwdCBkYXRhIGFuZCBzZW5kIGl0IHRvIHRoZSBuZXRvd29yay4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0Jc3RydWN0IGRzdF90cmFucyAqdCA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOwotCWludCBlcnI7Ci0KLQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgY2lwaGVyOiAlcCwgaGFzaDogJXAuXG4iLAotCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgZS0+Y2lwaGVyLCBlLT5oYXNoKTsKLQotCWUtPmVuYyA9IHQtPmVuYzsKLQllLT5pdiA9IGRzdF9nZW5faXYodCk7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoZSwgYmlvLCB0LT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlpZiAoZS0+aGFzaCkgewotCQkJdC0+Y21kLmNzaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsKLQkJCXQtPmNtZC5zaXplICs9IHQtPmNtZC5jc2l6ZTsKLQkJfQotCi0JCXJldHVybiBkc3RfdHJhbnNfc2VuZCh0KTsKLQl9IGVsc2UgewotCQl1OCAqaGFzaCA9IGUtPmRhdGEgKyBlLT5zaXplLzI7Ci0KLQkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhlLCBiaW8sIGhhc2gsIHQtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWRzdF90cmFuc19yZW1vdmUodCk7Ci0JCWRzdF90cmFuc19wdXQodCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQl0LT5lcnJvciA9IGVycjsKLQlkc3RfdHJhbnNfcHV0KHQpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTY2hlZHVsZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gdHJhbnNhY3Rpb24uCi0gKi8KLWludCBkc3RfdHJhbnNfY3J5cHRvKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwKLQkJZHN0X3RyYW5zX2NyeXB0b19zZXR1cCwgZHN0X3RyYW5zX2NyeXB0b19hY3Rpb24sCi0JCXQsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JZHN0X3RyYW5zX3B1dCh0KTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQ3J5cHRvIG1hY2hpbmVyeSBmb3IgdGhlIGV4cG9ydCBub2RlLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOwotCi0JZS0+cHJpdmF0ZSA9IGJpbzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfZXhwb3J0X2NyeXB0b19hY3Rpb24odm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOwotCXN0cnVjdCBiaW8gKmJpbyA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKLQlpbnQgZXJyOwotCi0JZHByaW50aygiJXM6IGU6ICVwLCBkYXRhOiAlcCwgYmlvOiAlbGx1LyV1LCBkaXI6ICVsdS5cbiIsCi0JCQlfX2Z1bmNfXywgZSwgZS0+ZGF0YSwgKHU2NCliaW8tPmJpX3NlY3RvciwKLQkJCWJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCi0JZS0+ZW5jID0gKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpOwotCWUtPml2ID0gcC0+Y21kLmlkOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKLQotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgcC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKLQl9IGVsc2UgewotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHAtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChlLT5oYXNoKSB7Ci0JCQlwLT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOwotCQkJcC0+Y21kLnNpemUgKz0gcC0+Y21kLmNzaXplOwotCQl9Ci0KLQkJZXJyID0gZHN0X2V4cG9ydF9zZW5kX2JpbyhiaW8pOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsCi0JCWRzdF9leHBvcnRfY3J5cHRvX3NldHVwLCBkc3RfZXhwb3J0X2NyeXB0b19hY3Rpb24sCi0JCWJpbywgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgzY2E3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjggKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotc3RhdGljIGludCBkc3RfbWFqb3I7Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgoZHN0X2hhc2hfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqZHN0X2hhc2h0YWJsZTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHN0X2hhc2h0YWJsZV9zaXplID0gMTI4OwotbW9kdWxlX3BhcmFtKGRzdF9oYXNodGFibGVfc2l6ZSwgdWludCwgMDY0NCk7Ci0KLXN0YXRpYyBjaGFyIGRzdF9uYW1lW10gPSAiRGVtZW50aWFudGluZyBnb2xkZmlzaCI7Ci0KLXN0YXRpYyBERUZJTkVfSURSKGRzdF9pbmRleF9pZHIpOwotc3RhdGljIHN0cnVjdCBjYl9pZCBjbl9kc3RfaWQgPSB7IENOX0RTVF9JRFgsIENOX0RTVF9WQUwgfTsKLQotLyoKLSAqIERTVCBzeXNmcyB0cmVlIGZvciBkZXZpY2UgY2FsbGVkICdzdG9yYWdlJzoKLSAqCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlLwotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS90eXBlIDogMTkyLjE2OC40LjgwOjEwMjUKLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2Uvc2l6ZSA6IDgwMAotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9uYW1lIDogc3RvcmFnZQotICovCi0KLXN0YXRpYyBpbnQgZHN0X2Rldl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgZHN0X2Rldl9idXNfdHlwZSA9IHsKLQkubmFtZSAJCT0gImRzdCIsCi0JLm1hdGNoIAkJPSAmZHN0X2Rldl9tYXRjaCwKLX07Ci0KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCWtmcmVlKGluZm8pOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSBkc3Rfbm9kZV9kZXYgPSB7Ci0JLmJ1cyAJCT0gJmRzdF9kZXZfYnVzX3R5cGUsCi0JLnJlbGVhc2UgCT0gJmRzdF9ub2RlX3JlbGVhc2UKLX07Ci0KLS8qCi0gKiBTZXR0aW5nIHNpemUgb2YgdGhlIG5vZGUgYWZ0ZXIgaXQgd2FzIGNoYW5nZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3NldF9zaXplKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCi0Jc2V0X2NhcGFjaXR5KG4tPmRpc2ssIG4tPnNpemUgPj4gOSk7Ci0KLQliZGV2ID0gYmRnZXRfZGlzayhuLT5kaXNrLCAwKTsKLQlpZiAoYmRldikgewotCQltdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7Ci0JCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgbi0+c2l6ZSk7Ci0JCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQliZHB1dChiZGV2KTsKLQl9Ci19Ci0KLS8qCi0gKiBEaXN0cmlidXRlZCBzdG9yYWdlIHJlcXVlc3QgcHJvY2Vzc2luZyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBkc3RfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHEtPnF1ZXVlZGF0YTsKLQlpbnQgZXJyID0gLUVJTzsKLQotCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFibGtfcXVldWVfZGlzY2FyZChxKSkgewotCQkvKgotCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKLQkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCi0JCSAqIHdpbGwgc3R1Y2sgYW5kIGZyZWV6ZSB0aGUgbWFjaGluZS4gVGhpcyBtYXkgYmUKLQkJICogbm90IHBhcnRpY3VsYXJ5IFhGUyBwcm9ibGVtIHRob3VnaCwgYnV0IGl0IGlzIHRoZQotCQkgKiBvbmx5IEZTIHdoaWNoIHNlbmRzIGVtcHR5IGJhcnJpZXIgYXQgdW1vdW50IHRpbWUKLQkJICogSSB3b3JrZWQgd2l0aC4KLQkJICoKLQkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKLQkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvCi0JCSAqIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpIG9ubHksIHdoaWNoIGRvZXMgbm90Ci0JCSAqIHdvcmsgaW4gdGhpcyBjYXNlLgotCQkgKi8KLQkJLyogZXJyID0gLUVPUE5PVFNVUFA7ICovCi0JCWVyciA9IDA7Ci0JCWdvdG8gZW5kX2lvOwotCX0KLQotCWJpb19nZXQoYmlvKTsKLQotCXJldHVybiBkc3RfcHJvY2Vzc19iaW8obiwgYmlvKTsKLQotZW5kX2lvOgotCWJpb19lbmRpbyhiaW8sIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIE9wZW4vY2xvc2UgY2FsbGJhY2tzIGZvciBhcHByb3ByaWF0ZSBibG9jayBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2JkZXZfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JZHN0X25vZGVfZ2V0KG4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9iZGV2X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZHN0X2Jsa19vcHMgPSB7Ci0JLm9wZW4JCT0gZHN0X2JkZXZfb3BlbiwKLQkucmVsZWFzZQk9IGRzdF9iZGV2X3JlbGVhc2UsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotfTsKLQotLyoKLSAqIEJsb2NrIGxheWVyIGJpbmRpbmcgLSBkaXNrIGlzIGNyZWF0ZWQgd2hlbiBhcnJheSBpcyBmdWxseSBjb25maWd1cmVkCi0gKiBieSB1c2Vyc3BhY2UgcmVxdWVzdC4KLSAqLwotc3RhdGljIGludCBkc3Rfbm9kZV9jcmVhdGVfZGlzayhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JdTMyIGluZGV4ID0gMDsKLQotCW4tPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoTlVMTCwgTlVMTCk7Ci0JaWYgKCFuLT5xdWV1ZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluLT5xdWV1ZS0+cXVldWVkYXRhID0gbjsKLQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG4tPnF1ZXVlLCBkc3RfcmVxdWVzdCk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG4tPnF1ZXVlLCBuLT5tYXhfcGFnZXMpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMobi0+cXVldWUsIG4tPm1heF9wYWdlcyk7Ci0KLQllcnIgPSAtRU5PTUVNOwotCW4tPmRpc2sgPSBhbGxvY19kaXNrKDEpOwotCWlmICghbi0+ZGlzaykKLQkJZ290byBlcnJfb3V0X2ZyZWVfcXVldWU7Ci0KLQlpZiAoIShuLT5zdGF0ZS0+cGVybWlzc2lvbnMgJiBEU1RfUEVSTV9XUklURSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRFNUIG5vZGUgJXMgYXR0YWNoZWQgcmVhZC1vbmx5LlxuIiwgbi0+bmFtZSk7Ci0JCXNldF9kaXNrX3JvKG4tPmRpc2ssIDEpOwotCX0KLQotCWlmICghaWRyX3ByZV9nZXQoJmRzdF9pbmRleF9pZHIsIEdGUF9LRVJORUwpKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JZXJyID0gaWRyX2dldF9uZXcoJmRzdF9pbmRleF9pZHIsIE5VTEwsICZpbmRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0Jbi0+ZGlzay0+bWFqb3IgPSBkc3RfbWFqb3I7Ci0Jbi0+ZGlzay0+Zmlyc3RfbWlub3IgPSBpbmRleDsKLQluLT5kaXNrLT5mb3BzID0gJmRzdF9ibGtfb3BzOwotCW4tPmRpc2stPnF1ZXVlID0gbi0+cXVldWU7Ci0Jbi0+ZGlzay0+cHJpdmF0ZV9kYXRhID0gbjsKLQlzbnByaW50ZihuLT5kaXNrLT5kaXNrX25hbWUsIHNpemVvZihuLT5kaXNrLT5kaXNrX25hbWUpLAotCQkJImRzdC0lcyIsIG4tPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcHV0OgotCXB1dF9kaXNrKG4tPmRpc2spOwotZXJyX291dF9mcmVlX3F1ZXVlOgotCWJsa19jbGVhbnVwX3F1ZXVlKG4tPnF1ZXVlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU3lzZnMgbWFjaGluZXJ5OiBzaG93IGRldmljZSdzIHNpemUuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3NpemUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIGluZm8tPnNpemUpOwotfQotCi0vKgotICogU2hvdyBsb2NhbCBleHBvcnRlZCBkZXZpY2UuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X2xvY2FsKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5mby0+bG9jYWwpOwotfQotCi0vKgotICogU2hvd3MgdHlwZSBvZiB0aGUgcmVtb3RlIG5vZGUgLSBkZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyCi0gKiBmb3IgbG9jYWwgbm9kZXMgYW5kIGFkZHJlc3MgKGFmX2luZXQgaXB2NC9pcHY2IG9ubHkpIGZvciByZW1vdGUgbm9kZXMuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQlpbnQgZmFtaWx5ID0gaW5mby0+bmV0LmFkZHIuc2FfZmFtaWx5OwotCi0JaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpbmZvLT5uZXQuYWRkcjsKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXUuJXUuJXUuJXU6JWRcbiIsCi0JCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwotCX0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCi0JCQkJJmluZm8tPm5ldC5hZGRyOwotCQlyZXR1cm4gc3ByaW50ZihidWYsCi0JCQkiJXBpNjolZFxuIiwKLQkJCSZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKLQl9IGVsc2UgewotCQlpbnQgaSwgc3ogPSBQQUdFX1NJWkUgLSAyOyAvKiAwIHN5bWJvbCBhbmQgJ1xuJyBiZWxvdyAqLwotCQlpbnQgc2l6ZSwgYWRkcmxlbiA9IGluZm8tPm5ldC5hZGRyLnNhX2RhdGFfbGVuOwotCQl1bnNpZ25lZCBjaGFyICphID0gKHVuc2lnbmVkIGNoYXIgKikmaW5mby0+bmV0LmFkZHIuc2FfZGF0YTsKLQkJY2hhciAqYnVmX29yaWcgPSBidWY7Ci0KLQkJc2l6ZSA9IHNucHJpbnRmKGJ1Ziwgc3osICJmYW1pbHk6ICVkLCBhZGRybGVuOiAldSwgYWRkcjogIiwKLQkJCQlmYW1pbHksIGFkZHJsZW4pOwotCQlzeiAtPSBzaXplOwotCQlidWYgKz0gc2l6ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgYWRkcmxlbjsgKytpKSB7Ci0JCQlpZiAoc3ogPCAzKQotCQkJCWJyZWFrOwotCi0JCQlzaXplID0gc25wcmludGYoYnVmLCBzeiwgIiUwMnggIiwgYVtpXSk7Ci0JCQlzeiAtPSBzaXplOwotCQkJYnVmICs9IHNpemU7Ci0JCX0KLQkJYnVmICs9IHNwcmludGYoYnVmLCAiXG4iKTsKLQotCQlyZXR1cm4gYnVmIC0gYnVmX29yaWc7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZHN0X25vZGVfYXR0cnNbXSA9IHsKLQlfX0FUVFIoc2l6ZSwgMDQ0NCwgZHN0X3Nob3dfc2l6ZSwgTlVMTCksCi0JX19BVFRSKHR5cGUsIDA0NDQsIGRzdF9zaG93X3R5cGUsIE5VTEwpLAotCV9fQVRUUihsb2NhbCwgMDQ0NCwgZHN0X3Nob3dfbG9jYWwsIE5VTEwpLAotfTsKLQotc3RhdGljIGludCBkc3RfY3JlYXRlX25vZGVfYXR0cmlidXRlcyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzdF9ub2RlX2F0dHJzKTsgKytpKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAotCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfcmVtb3ZlX2FsbDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVtb3ZlX2FsbDoKLQl3aGlsZSAoLS1pID49IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAotCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLX0KLQotLyoKLSAqIFN5c2ZzIGNsZWFudXAgYW5kIGluaXRpYWxpemF0aW9uLgotICogU2hvd3MgbnVtYmVyIG9mIHVzZWZ1bCBwYXJhbWV0ZXJzLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9zeXNmc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpZiAobi0+aW5mbykgewotCQlkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhuKTsKLQkJZGV2aWNlX3VucmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7Ci0JCW4tPmluZm8gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBkc3Rfbm9kZV9zeXNmc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCi0Jbi0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3RfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghbi0+aW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoJm4tPmluZm8tPmRldmljZSwgJmRzdF9ub2RlX2Rldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKLQluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKLQotCWRldl9zZXRfbmFtZSgmbi0+aW5mby0+ZGV2aWNlLCAiZHN0LSVzIiwgbi0+bmFtZSk7Ci0JZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOwotCWlmIChlcnIpIHsKLQkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5vZGUgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJbi0+bmFtZSwgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JZHN0X2NyZWF0ZV9ub2RlX2F0dHJpYnV0ZXMobik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWtmcmVlKG4tPmluZm8pOwotCW4tPmluZm8gPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBEU1Qgbm9kZSBoYXNoIHRhYmxlcyBtYWNoaW5lcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9oYXNoKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JcmV0dXJuIGpoYXNoKHN0ciwgc2l6ZSwgMCkgJSBkc3RfaGFzaHRhYmxlX3NpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbW92ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9kZWxfaW5pdCgmbi0+bm9kZV9lbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X25vZGVfYWRkKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQl1bnNpZ25lZCBoYXNoID0gZHN0X2hhc2gobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpKTsKLQotCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm4tPm5vZGVfZW50cnksICZkc3RfaGFzaHRhYmxlW2hhc2hdKTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotfQotCi0vKgotICogQ2xlYW5pbmcgbm9kZSB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGZyZWVkLgotICogVGhlcmUgYXJlIHN0aWxsIHVzZXJzIG9mIHRoZSBzb2NrZXQgdGhvdWdoLAotICogc28gY29ubmVjdGlvbiBjbGVhbnVwIHNob3VsZCBiZSBwcm90ZWN0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX2NsZWFudXAoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gbi0+c3RhdGU7Ci0KLQlpZiAoIXN0KQotCQlyZXR1cm47Ci0KLQlpZiAobi0+cXVldWUpIHsKLQkJYmxrX2NsZWFudXBfcXVldWUobi0+cXVldWUpOwotCi0JCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCQlpZHJfcmVtb3ZlKCZkc3RfaW5kZXhfaWRyLCBuLT5kaXNrLT5maXJzdF9taW5vcik7Ci0JCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci0KLQkJcHV0X2Rpc2sobi0+ZGlzayk7Ci0JfQotCi0JaWYgKG4tPmJkZXYpIHsKLQkJc3luY19ibG9ja2RldihuLT5iZGV2KTsKLQkJY2xvc2VfYmRldl9leGNsdXNpdmUobi0+YmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Ci0JfQotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCXN0LT5uZWVkX2V4aXQgPSAxOwotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCi0JZHN0X3N0YXRlX3B1dChzdCk7Ci0Jbi0+c3RhdGUgPSBOVUxMOwotfQotCi0vKgotICogRnJlZSBzZWN1cml0eSBhdHRyaWJ1dGVzIGF0dGFjaGVkIHRvIGdpdmVuIG5vZGUuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9zZWN1cml0eV9leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3NlY3VyZSAqcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCB0bXAsICZuLT5zZWN1cml0eV9saXN0LCBzZWNfZW50cnkpIHsKLQkJbGlzdF9kZWwoJnMtPnNlY19lbnRyeSk7Ci0JCWtmcmVlKHMpOwotCX0KLX0KLQotLyoKLSAqIEZyZWUgbm9kZSB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzLgotICogQWN0dWFsbHkgbm9kZSBoYXMgdG8gYmUgZnJlZWQgb24gYmVoYWxmIG9kIHVzZXJzcGFjZSBwcm9jZXNzLAotICogc2luY2UgdGhlcmUgYXJlIG51bWJlciBvZiB0aHJlYWRzLCB3aGljaCBhcmUgZW1iZWRkZWQgaW4gdGhlCi0gKiBub2RlLCBzbyB0aGV5IGNhbiBub3QgZXhpdCBhbmQgZnJlZSBub2RlIGZyb20gdGhlcmUsIHRoYXQgaXMKLSAqIHdoeSB0aGVyZSBpcyBhIHdha2V1cCBpZiByZWZlcmVuY2UgY291bnRlciBpcyBub3QgZXF1YWwgdG8gemVyby4KLSAqLwotdm9pZCBkc3Rfbm9kZV9wdXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWlmICh1bmxpa2VseSghbikpCi0JCXJldHVybjsKLQotCWRwcmludGsoIiVzOiBuOiAlcCwgcmVmY250OiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgbiwgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOwotCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm4tPnJlZmNudCkpIHsKLQkJZHN0X25vZGVfcmVtb3ZlKG4pOwotCQluLT50cmFuc19zY2FuX3RpbWVvdXQgPSAwOwotCQlkc3Rfbm9kZV9jbGVhbnVwKG4pOwotCQl0aHJlYWRfcG9vbF9kZXN0cm95KG4tPnBvb2wpOwotCQlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOwotCQlkc3Rfbm9kZV9jcnlwdG9fZXhpdChuKTsKLQkJZHN0X3NlY3VyaXR5X2V4aXQobik7Ci0JCWRzdF9ub2RlX3RyYW5zX2V4aXQobik7Ci0KLQkJa2ZyZWUobik7Ci0KLQkJZHByaW50aygiJXM6IGZyZWVkIG46ICVwLlxuIiwgX19mdW5jX18sIG4pOwotCX0gZWxzZSB7Ci0JCXdha2VfdXAoJm4tPndhaXQpOwotCX0KLX0KLQotLyoKLSAqIFNldHRpbmcgdXAgZXhwb3J0IGRldmljZTogbG9va3VwIGJ5IHRoZSBuYW1lLCBnZXQgaXRzIHNpemUKLSAqIGFuZCBzZXR1cCBsaXN0ZW5pbmcgc29ja2V0LCB3aGljaCB3aWxsIGFjY2VwdCBjbGllbnRzLCB3aGljaAotICogd2lsbCBzdWJtaXQgSU8gZm9yIGdpdmVuIHN0b3JhZ2UuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3NldHVwX2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpCi17Ci0JaW50IGVycjsKLQotCXNucHJpbnRmKG4tPmluZm8tPmxvY2FsLCBzaXplb2Yobi0+aW5mby0+bG9jYWwpLCAiJXMiLCBsZS0+ZGV2aWNlKTsKLQotCW4tPmJkZXYgPSBvcGVuX2JkZXZfZXhjbHVzaXZlKGxlLT5kZXZpY2UsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUsIE5VTEwpOwotCWlmIChJU19FUlIobi0+YmRldikpCi0JCXJldHVybiBQVFJfRVJSKG4tPmJkZXYpOwotCi0JaWYgKG4tPnNpemUgIT0gMCkKLQkJbi0+c2l6ZSA9IG1pbl90KGxvZmZfdCwgbi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSwgbi0+c2l6ZSk7Ci0JZWxzZQotCQluLT5zaXplID0gbi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZTsKLQotCW4tPmluZm8tPnNpemUgPSBuLT5zaXplOwotCWVyciA9IGRzdF9ub2RlX2luaXRfbGlzdGVuZWQobiwgbGUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9jbGVhbnVwOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfY2xlYW51cDoKLQljbG9zZV9iZGV2X2V4Y2x1c2l2ZShuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKLQluLT5iZGV2ID0gTlVMTDsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEVtcHR5IHRocmVhZCBwb29sIGNhbGxiYWNrcyBmb3IgdGhlIG5ldHdvcmsgcHJvY2Vzc2luZyB0aHJlYWRzLiAqLwotc3RhdGljIGlubGluZSB2b2lkICpkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCh2b2lkICpkYXRhKQotewotCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwKHZvaWQgKmRhdGEpCi17Ci0JZHByaW50aygiJXM6IGRhdGE6ICVwLlxuIiwgX19mdW5jX18sIGRhdGEpOwotfQotCi0vKgotICogQWxsb2NhdGUgRFNUIG5vZGUgYW5kIGluaXRpYWxpemUgc29tZSBvZiBpdHMgcGFyYW1ldGVycy4KLSAqLwotc3RhdGljIHN0cnVjdCBkc3Rfbm9kZSAqZHN0X2FsbG9jX25vZGUoc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJaW50ICgqc3RhcnQpKHN0cnVjdCBkc3Rfbm9kZSAqKSwKLQkJaW50IG51bSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm47Ci0JaW50IGVycjsKLQotCW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X25vZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW4pCi0JCXJldHVybiBOVUxMOwotCi0JSU5JVF9MSVNUX0hFQUQoJm4tPm5vZGVfZW50cnkpOwotCi0JSU5JVF9MSVNUX0hFQUQoJm4tPnNlY3VyaXR5X2xpc3QpOwotCW11dGV4X2luaXQoJm4tPnNlY3VyaXR5X2xvY2spOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmbi0+d2FpdCk7Ci0KLQluLT50cmFuc19zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGN0bC0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKLQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCkKLQkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gSFo7Ci0KLQluLT50cmFuc19tYXhfcmV0cmllcyA9IGN0bC0+dHJhbnNfbWF4X3JldHJpZXM7Ci0JaWYgKCFuLT50cmFuc19tYXhfcmV0cmllcykKLQkJbi0+dHJhbnNfbWF4X3JldHJpZXMgPSAxMDsKLQotCS8qCi0JICogUHJldHR5IG11Y2ggYXJiaXRyYXJ5IGRlZmF1bHQgbnVtYmVycy4KLQkgKiAzMiBtYXRjaGVzIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIGJpbyBvcmlnaW5hdGVkIGZyb20gZXh0MyAoMzEpLgotCSAqLwotCW4tPm1heF9wYWdlcyA9IGN0bC0+bWF4X3BhZ2VzOwotCWlmICghbi0+bWF4X3BhZ2VzKQotCQluLT5tYXhfcGFnZXMgPSAzMjsKLQotCWlmIChuLT5tYXhfcGFnZXMgPiAxMDI0KQotCQluLT5tYXhfcGFnZXMgPSAxMDI0OwotCi0Jbi0+c3RhcnQgPSBzdGFydDsKLQluLT5zaXplID0gY3RsLT5zaXplOwotCi0JYXRvbWljX3NldCgmbi0+cmVmY250LCAxKTsKLQlhdG9taWNfbG9uZ19zZXQoJm4tPmdlbiwgMCk7Ci0Jc25wcmludGYobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpLCAiJXMiLCBjdGwtPm5hbWUpOwotCi0JZXJyID0gZHN0X25vZGVfc3lzZnNfaW5pdChuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCW4tPnBvb2wgPSB0aHJlYWRfcG9vbF9jcmVhdGUobnVtLCBuLT5uYW1lLCBkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCwKLQkJCWRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwLCBuKTsKLQlpZiAoSVNfRVJSKG4tPnBvb2wpKSB7Ci0JCWVyciA9IFBUUl9FUlIobi0+cG9vbCk7Ci0JCWdvdG8gZXJyX291dF9zeXNmc19leGl0OwotCX0KLQotCWRwcmludGsoIiVzOiBuOiAlcCwgbmFtZTogJXMuXG4iLCBfX2Z1bmNfXywgbiwgbi0+bmFtZSk7Ci0KLQlyZXR1cm4gbjsKLQotZXJyX291dF9zeXNmc19leGl0OgotCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUobik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBTdGFydGluZyBhIG5vZGUsIGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIHNlcnZlcjoKLSAqIHJlZ2lzdGVyIGJsb2NrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBtZWNoYW5pc20uCi0gKiBJbiByZXZlcnMgb3JkZXIgdGhvdWdoLgotICoKLSAqIEl0IHdpbGwgYXV0b25lZ290aWF0ZSBzb21lIHBhcmFtZXRlcnMgd2l0aCB0aGUgcmVtb3RlIG5vZGUKLSAqIGFuZCB1cGRhdGUgbG9jYWwgaWYgbmVlZGVkLgotICoKLSAqIFRyYW5zYWN0aW9uIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyBiZWZvcmUKLSAqIHN0YXJ0aW5nIHRoZSBub2RlLCBzaW5jZSB0cmFuc2FjdGlvbiBzaG91bGQgaW5jbHVkZSBub3Qgb25seQotICogYmxvY2sgSU8sIGJ1dCBhbHNvIGNyeXB0byByZWxhdGVkIGRhdGEgKGlmIGFueSksIHdoaWNoIGFyZQotICogaW5pdGlhbGl6ZWQgc2VwYXJhdGVseS4KLSAqLwotc3RhdGljIGludCBkc3Rfc3RhcnRfcmVtb3RlKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF90cmFucykpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBkc3Rfbm9kZV9jcmVhdGVfZGlzayhuKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZHN0X25vZGVfc2V0X3NpemUobik7Ci0JYWRkX2Rpc2sobi0+ZGlzayk7Ci0KLQlkcHJpbnRrKCJEU1Q6IHN0YXJ0ZWQgcmVtb3RlIG5vZGUgJyVzJywgbWlub3I6ICVkLlxuIiwKLQkJCW4tPm5hbWUsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQWRkaW5nIHJlbW90ZSBub2RlIGFuZCBpbml0aWFsaXplIGNvbm5lY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2FkZF9yZW1vdGUoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKnJjdGwgPSBkYXRhOwotCi0JaWYgKG4pCi0JCXJldHVybiAtRUVYSVNUOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW4gPSBkc3RfYWxsb2Nfbm9kZShjdGwsIGRzdF9zdGFydF9yZW1vdGUsIDEpOwotCWlmICghbikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoJm4tPmluZm8tPm5ldCwgcmN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQllcnIgPSBkc3Rfbm9kZV9pbml0X2Nvbm5lY3RlZChuLCByY3RsKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWRzdF9ub2RlX2FkZChuKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JZHN0X25vZGVfcHV0KG4pOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBBZGRpbmcgZXhwb3J0IG5vZGU6IGluaXRpYWxpemluZyBibG9jayBkZXZpY2UgYW5kIGxpc3RlbmluZyBzb2NrZXQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2FkZF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUgPSBkYXRhOwotCi0JaWYgKG4pCi0JCXJldHVybiAtRUVYSVNUOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X2N0bCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X2V4cG9ydCwgMik7Ci0JaWYgKCFuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGRzdF9zZXR1cF9leHBvcnQobiwgY3RsLCBsZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlkc3Rfbm9kZV9hZGQobik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRzdF9ub2RlX3JlbW92ZV91bmxvYWQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXByaW50ayhLRVJOX0lORk8gIlNUT1BQRUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsCi0JCQluLT5uYW1lLCBuLT5zaXplKTsKLQotCWlmIChuLT5kaXNrKQotCQlkZWxfZ2VuZGlzayhuLT5kaXNrKTsKLQotCWRzdF9ub2RlX3JlbW92ZShuKTsKLQlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOwotCi0JLyoKLQkgKiBUaGlzIGlzIG5vdCBhIGhhY2suIFJlYWxseS4KLQkgKiBOb2RlJ3MgcmVmZXJlbmNlIGNvdW50ZXIgYWxsb3dzIHRvIGltcGxlbWVudCBmaW5lIGdyYWluZWQKLQkgKiBub2RlIGZyZWVpbmcsIGJ1dCBzaW5jZSBhbGwgdHJhbnNhY3Rpb25zICh3aGljaCBob2xkIG5vZGUncwotCSAqIHJlZmVyZW5jZSBjb3VudGVyKSBhcmUgcHJvY2Vzc2VkIGluIHRoZSBkZWRpY2F0ZWQgdGhyZWFkLAotCSAqIGl0IGlzIHBvc3NpYmxlIHRoYXQgcmVmZXJlbmNlIHdpbGwgaGl0IHplcm8gaW4gdGhhdCB0aHJlYWQsCi0JICogc28gd2Ugd2lsbCBub3QgYmUgYWJsZSB0byBleGl0IHRocmVhZCBhbmQgY2xlYW51cCB0aGUgbm9kZS4KLQkgKgotCSAqIFNvLCB3ZSByZW1vdmUgZGlzaywgc28gbm8gbmV3IGFjdGl2aXR5IGlzIHBvc3NpYmxlLCBhbmQKLQkgKiB3YWl0IHVudGlsIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9uIGFyZSBjb21wbGV0ZWQgKGVpdGhlcgotCSAqIGluIHJlY2VpdmluZyB0aHJlYWQgb3IgYnkgdGltZW91dCBpbiB3b3JrcXVldWUpLCBpbiB0aGlzCi0JICogY2FzZSByZWZlcmVuY2UgY291bnRlciB3aWxsIGJlIGxlc3Mgb3IgZXF1YWwgdG8gMiAob25jZSBzZXQgaW4KLQkgKiBkc3RfYWxsb2Nfbm9kZSgpIGFuZCB0aGVuIGluIGNvbm5lY3RvciBtZXNzYWdlIHBhcnNlcjsKLQkgKiBvciB3aGVuIHdlIGZvcmNlIG1vZHVsZSB1bmxvYWRpbmcsIGFuZCBjb25uZWN0b3IgbWVzc2FnZQotCSAqIHBhcnNlciBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlLCBpbiB0aGlzIGNhc2UgcmVmZXJlbmNlCi0JICogY291bnRlciB3aWxsIGJlIGVxdWFsIHRvIDEpLAotCSAqIGFuZCBzdWJzZXF1ZW50IGRzdF9ub2RlX3B1dCgpIGNhbGxzIHdpbGwgZnJlZSB0aGUgbm9kZS4KLQkgKi8KLQlkcHJpbnRrKCIlczogZ29pbmcgdG8gc2xlZXAgd2l0aCAlZCByZWZjbnQuXG4iLAotCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKLQl3YWl0X2V2ZW50KG4tPndhaXQsIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpIDw9IDIpOwotCi0JZHN0X25vZGVfcHV0KG4pOwotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIG5vZGUgZnJvbSB0aGUgaGFzaCB0YWJsZS4KLSAqLwotc3RhdGljIGludCBkc3RfZGVsX25vZGUoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIGRzdF9ub2RlX3JlbW92ZV91bmxvYWQobik7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiBub2RlLgotICovCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9faW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3J5cHRvID0gZGF0YTsKLQotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fY3RsKSArIGNyeXB0by0+aGFzaF9rZXlzaXplICsKLQkJCWNyeXB0by0+Y2lwaGVyX2tleXNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG4tPnRyYW5zX2NhY2hlKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCXJldHVybiBkc3Rfbm9kZV9jcnlwdG9faW5pdChuLCBjcnlwdG8pOwotfQotCi0vKgotICogU2VjdXJpdHkgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIGludCBkc3Rfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCXN0cnVjdCBkc3Rfc2VjdXJlICpzOwotCi0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X3NlY3VyZV91c2VyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9zZWN1cmUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KCZzLT5zZWMsIGRhdGEsIHNpemUpOwotCi0JbXV0ZXhfbG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmcy0+c2VjX2VudHJ5LCAmbi0+c2VjdXJpdHlfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogS2lsbCdlbSBhbGwhCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3N0YXJ0X25vZGUoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChuLT50cmFuc19jYWNoZSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBuLT5zdGFydChuKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1RBUlRFRCBuYW1lOiAnJXMnLCBzaXplOiAlbGx1LlxuIiwgbi0+bmFtZSwgbi0+c2l6ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgaW50ICgqZHN0X2NvbW1hbmRfZnVuYykoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0KLS8qCi0gKiBMaXN0IG9mIHVzZXJzcGFjZSBjb21tYW5kcy4KLSAqLwotc3RhdGljIGRzdF9jb21tYW5kX2Z1bmMgZHN0X2NvbW1hbmRzW10gPSB7Ci0JW0RTVF9BRERfUkVNT1RFXSA9ICZkc3RfYWRkX3JlbW90ZSwKLQlbRFNUX0FERF9FWFBPUlRdID0gJmRzdF9hZGRfZXhwb3J0LAotCVtEU1RfREVMX05PREVdID0gJmRzdF9kZWxfbm9kZSwKLQlbRFNUX0NSWVBUT10gPSAmZHN0X2NyeXB0b19pbml0LAotCVtEU1RfU0VDVVJJVFldID0gJmRzdF9zZWN1cml0eV9pbml0LAotCVtEU1RfU1RBUlRdID0gJmRzdF9zdGFydF9ub2RlLAotfTsKLQotLyoKLSAqIENvbmZpZ3VyYXRpb24gcGFyc2VyLgotICovCi1zdGF0aWMgdm9pZCBjbl9kc3RfY2FsbGJhY2soc3RydWN0IGNuX21zZyAqbXNnLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKm5zcCkKLXsKLQlzdHJ1Y3QgZHN0X2N0bCAqY3RsOwotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9jdGxfYWNrIGFjazsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBOVUxMLCAqdG1wOwotCXVuc2lnbmVkIGludCBoYXNoOwotCi0JaWYgKCFjYXBfcmFpc2VkKG5zcC0+ZWZmX2NhcCwgQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobXNnLT5sZW4gPCBzaXplb2Yoc3RydWN0IGRzdF9jdGwpKSB7Ci0JCWVyciA9IC1FQkFETVNHOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljdGwgPSAoc3RydWN0IGRzdF9jdGwgKiltc2ctPmRhdGE7Ci0KLQlpZiAoY3RsLT5jbWQgPj0gRFNUX0NNRF9NQVgpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWhhc2ggPSBkc3RfaGFzaChjdGwtPm5hbWUsIHNpemVvZihjdGwtPm5hbWUpKTsKLQotCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZHN0X2hhc2h0YWJsZVtoYXNoXSwgbm9kZV9lbnRyeSkgewotCQlpZiAoIW1lbWNtcCh0bXAtPm5hbWUsIGN0bC0+bmFtZSwgc2l6ZW9mKHRtcC0+bmFtZSkpKSB7Ci0JCQluID0gdG1wOwotCQkJZHN0X25vZGVfZ2V0KG4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQotCWVyciA9IGRzdF9jb21tYW5kc1tjdGwtPmNtZF0obiwgY3RsLCBtc2ctPmRhdGEgKyBzaXplb2Yoc3RydWN0IGRzdF9jdGwpLAotCQkJbXNnLT5sZW4gLSBzaXplb2Yoc3RydWN0IGRzdF9jdGwpKTsKLQotCWRzdF9ub2RlX3B1dChuKTsKLW91dDoKLQltZW1jcHkoJmFjay5tc2csIG1zZywgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpKTsKLQotCWFjay5tc2cuYWNrID0gbXNnLT5hY2sgKyAxOwotCWFjay5tc2cubGVuID0gc2l6ZW9mKHN0cnVjdCBkc3RfY3RsX2FjaykgLSBzaXplb2Yoc3RydWN0IGNuX21zZyk7Ci0KLQlhY2suZXJyb3IgPSBlcnI7Ci0KLQljbl9uZXRsaW5rX3NlbmQoJmFjay5tc2csIDAsIEdGUF9LRVJORUwpOwotfQotCi0vKgotICogR2xvYmFsIGluaXRpYWxpemF0aW9uOiBzeXNmcywgaGFzaCB0YWJsZSwgYmxvY2sgZGV2aWNlIHJlZ2lzdHJhdGlvbiwKLSAqIGNvbm5lY3RvciBhbmQgdmFyaW91cyBjYWNoZXMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRzdF9zeXNmc19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19yZWdpc3RlcigmZHN0X2Rldl9idXNfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9zeXNmc19leGl0KHZvaWQpCi17Ci0JYnVzX3VucmVnaXN0ZXIoJmRzdF9kZXZfYnVzX3R5cGUpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBkc3RfaGFzaHRhYmxlX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWRzdF9oYXNodGFibGUgPSBrY2FsbG9jKGRzdF9oYXNodGFibGVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc3RfaGFzaHRhYmxlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCBkc3RfaGFzaHRhYmxlX3NpemU7ICsraSkKLQkJSU5JVF9MSVNUX0hFQUQoJmRzdF9oYXNodGFibGVbaV0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9oYXNodGFibGVfZXhpdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiwgKnRtcDsKLQotCWZvciAoaSA9IDA7IGkgPCBkc3RfaGFzaHRhYmxlX3NpemU7ICsraSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobiwgdG1wLCAmZHN0X2hhc2h0YWJsZVtpXSwgbm9kZV9lbnRyeSkgewotCQkJZHN0X25vZGVfcmVtb3ZlX3VubG9hZChuKTsKLQkJfQotCX0KLQotCWtmcmVlKGRzdF9oYXNodGFibGUpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWVyciA9IGRzdF9oYXNodGFibGVfaW5pdCgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JZXJyID0gZHN0X2V4cG9ydF9pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2hhc2h0YWJsZV9leGl0OwotCi0JZXJyID0gcmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycl9vdXRfZXhwb3J0X2V4aXQ7Ci0JaWYgKGVycikKLQkJZHN0X21ham9yID0gZXJyOwotCi0JZXJyID0gZHN0X3N5c2ZzX2luaXQoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfdW5yZWdpc3RlcjsKLQotCWVyciA9IGNuX2FkZF9jYWxsYmFjaygmY25fZHN0X2lkLCAiRFNUIiwgY25fZHN0X2NhbGxiYWNrKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc3lzZnNfZXhpdDsKLQotCXByaW50ayhLRVJOX0lORk8gIkRpc3RyaWJ1dGVkIHN0b3JhZ2UsICclcycgcmVsZWFzZS5cbiIsIGRzdF9uYW1lKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3N5c2ZzX2V4aXQ6Ci0JZHN0X3N5c2ZzX2V4aXQoKTsKLWVycl9vdXRfdW5yZWdpc3RlcjoKLQl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKLWVycl9vdXRfZXhwb3J0X2V4aXQ6Ci0JZHN0X2V4cG9ydF9leGl0KCk7Ci1lcnJfb3V0X2hhc2h0YWJsZV9leGl0OgotCWRzdF9oYXNodGFibGVfZXhpdCgpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkc3Rfc3lzX2V4aXQodm9pZCkKLXsKLQljbl9kZWxfY2FsbGJhY2soJmNuX2RzdF9pZCk7Ci0JdW5yZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7Ci0JZHN0X2hhc2h0YWJsZV9leGl0KCk7Ci0JZHN0X3N5c2ZzX2V4aXQoKTsKLQlkc3RfZXhwb3J0X2V4aXQoKTsKLX0KLQotbW9kdWxlX2luaXQoZHN0X3N5c19pbml0KTsKLW1vZHVsZV9leGl0KGRzdF9zeXNfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiRGlzdHJpYnV0ZWQgc3RvcmFnZSIpOwotTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMjQyMzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDY2MCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotLyoKLSAqIEV4cG9ydCBiaW9zZXQgaXMgdXNlZCBmb3Igc2VydmVyIGJsb2NrIElPIHJlcXVlc3RzLgotICovCi1zdGF0aWMgc3RydWN0IGJpb19zZXQgKmRzdF9iaW9fc2V0OwotCi1pbnQgX19pbml0IGRzdF9leHBvcnRfaW5pdCh2b2lkKQotewotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JZHN0X2Jpb19zZXQgPSBiaW9zZXRfY3JlYXRlKDMyLCBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOwotCWlmICghZHN0X2Jpb19zZXQpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIGRzdF9leHBvcnRfZXhpdCh2b2lkKQotewotCWJpb3NldF9mcmVlKGRzdF9iaW9fc2V0KTsKLX0KLQotLyoKLSAqIFdoZW4gY2xpZW50IGNvbm5lY3RzIGFuZCBhdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBzZXJ2ZXIgbm9kZSwKLSAqIGl0cyBwZXJtaXNzaW9ucyBhcmUgY2hlY2tlZCBpbiBhIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYW5kIHNlbnQKLSAqIGJhY2suCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHN0X2NoZWNrX3Blcm1pc3Npb25zKHN0cnVjdCBkc3Rfc3RhdGUgKm1haW4sCi0JCXN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IG1haW4tPm5vZGU7Ci0Jc3RydWN0IGRzdF9zZWN1cmUgKnNlbnRyeTsKLQlzdHJ1Y3QgZHN0X3NlY3VyZV91c2VyICpzOwotCXN0cnVjdCBzYWRkciAqc2EgPSAmc3QtPmN0bC5hZGRyOwotCXVuc2lnbmVkIGludCBwZXJtID0gMDsKLQotCW11dGV4X2xvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VudHJ5LCAmbi0+c2VjdXJpdHlfbGlzdCwgc2VjX2VudHJ5KSB7Ci0JCXMgPSAmc2VudHJ5LT5zZWM7Ci0KLQkJaWYgKHMtPmFkZHIuc2FfZmFtaWx5ICE9IHNhLT5zYV9mYW1pbHkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocy0+YWRkci5zYV9kYXRhX2xlbiAhPSBzYS0+c2FfZGF0YV9sZW4pCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBUaGlzICcyJyBiZWxvdyBpcyBhIHBvcnQgZmllbGQuIFRoaXMgbWF5IGJlIHZlcnkgd3JvbmcgdG8gZG8KLQkJICogaW4gYXRhbGsgZm9yIGV4YW1wbGUgdGhvdWdoLiBJZiB0aGVyZSB3aWxsIGJlIGFueSBuZWVkCi0JCSAqIHRvIGV4dGVudCBwcm90b2NvbCB0byBzb21ldGhpbmcgZWxzZSwgSSBjYW4gY3JlYXRlCi0JCSAqIHBlci1mYW1pbHkgaGVscGVycyBhbmQgdXNlIHRoZW0gaW5zdGVhZCBvZiB0aGlzIG1lbWNtcC4KLQkJICovCi0JCWlmIChtZW1jbXAocy0+YWRkci5zYV9kYXRhICsgMiwgc2EtPnNhX2RhdGEgKyAyLAotCQkJCQlzYS0+c2FfZGF0YV9sZW4gLSAyKSkKLQkJCWNvbnRpbnVlOwotCi0JCXBlcm0gPSBzLT5wZXJtaXNzaW9uczsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQotCXJldHVybiBwZXJtOwotfQotCi0vKgotICogQWNjZXB0IG5ldyBjbGllbnQ6IGFsbG9jYXRlIGFwcHJvcHJpYXRlIG5ldHdvcmsgc3RhdGUgYW5kIGNoZWNrIHBlcm1pc3Npb25zLgotICovCi1zdGF0aWMgc3RydWN0IGRzdF9zdGF0ZSAqZHN0X2FjY2VwdF9jbGllbnQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JdW5zaWduZWQgaW50IHJldmVudHMgPSAwOwotCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOwotCXVuc2lnbmVkIGludCBtYXNrID0gZXJyX21hc2sgfCBQT0xMSU47Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqbmV3OwotCi0Jd2hpbGUgKCFlcnIgJiYgIXNvY2spIHsKLQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQlpZiAoIShyZXZlbnRzICYgbWFzaykpIHsKLQkJCURFRklORV9XQUlUKHdhaXQpOwotCi0JCQlmb3IgKDs7KSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KCZzdC0+dGhyZWFkX3dhaXQsCi0JCQkJCQkmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCQlicmVhazsKLQotCQkJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJCQlpZiAocmV2ZW50cyAmIG1hc2spCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJCQlicmVhazsKLQotCQkJCS8qCi0JCQkJICogTWFnaWMgSFo/IFBvbGxpbmcgY2hlY2sgYWJvdmUgaXMgbm90IHNhZmUgaW4KLQkJCQkgKiBhbGwgY2FzZXMgKGxpa2Ugc29ja2V0IHJlc2V0IGluIEJIIGNvbnRleHQpLAotCQkJCSAqIHNvIGl0IGlzIHNpbXBsZXIganVzdCB0byBwb3N0cG9uZSBpdCB0byB0aGUKLQkJCQkgKiBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcKLQkJCQkgKiBzcGVjaWFsIGxvY2tpbmcgdGhlcmUuCi0JCQkJICovCi0JCQkJc2NoZWR1bGVfdGltZW91dChIWik7Ci0JCQl9Ci0JCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7Ci0JCX0KLQotCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJZHN0X3N0YXRlX2xvY2soc3QpOwotCi0JCWRwcmludGsoIiVzOiBzdDogJXAsIHJldmVudHM6ICV4IFtlcnI6ICVkLCBpbjogJWRdLlxuIiwKLQkJCV9fZnVuY19fLCBzdCwgcmV2ZW50cywgcmV2ZW50cyAmIGVycl9tYXNrLAotCQkJcmV2ZW50cyAmIFBPTExJTik7Ci0KLQkJaWYgKHJldmVudHMgJiBlcnJfbWFzaykgewotCQkJZHByaW50aygiJXM6IHJldmVudHM6ICV4LCBzb2NrZXQ6ICVwLCBlcnI6ICVkLlxuIiwKLQkJCQkJX19mdW5jX18sIHJldmVudHMsIHN0LT5zb2NrZXQsIGVycik7Ci0JCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJfQotCi0JCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQllcnIgPSAtRU5PREVWOwotCi0JCWlmIChzdC0+c29ja2V0ICYmIChyZXZlbnRzICYgUE9MTElOKSkKLQkJCWVyciA9IGtlcm5lbF9hY2NlcHQoc3QtPnNvY2tldCwgJnNvY2ssIDApOwotCi0JCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCX0KLQotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JbmV3ID0gZHN0X3N0YXRlX2FsbG9jKHN0LT5ub2RlKTsKLQlpZiAoSVNfRVJSKG5ldykpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0JfQotCW5ldy0+c29ja2V0ID0gc29jazsKLQotCW5ldy0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKLQllcnIgPSBrZXJuZWxfZ2V0cGVlcm5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAotCQkJKGludCAqKSZuZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0JbmV3LT5wZXJtaXNzaW9ucyA9IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdCwgbmV3KTsKLQlpZiAobmV3LT5wZXJtaXNzaW9ucyA9PSAwKSB7Ci0JCWVyciA9IC1FUEVSTTsKLQkJZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCi0JCQkJIkNsaWVudCBpcyBub3QgYWxsb3dlZCB0byBjb25uZWN0Iik7Ci0JCWdvdG8gZXJyX291dF9wdXQ7Ci0JfQotCi0JZXJyID0gZHN0X3BvbGxfaW5pdChuZXcpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQlkc3RfZHVtcF9hZGRyKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKLQkJCSJDb25uZWN0ZWQgY2xpZW50Iik7Ci0KLQlyZXR1cm4gbmV3OwotCi1lcnJfb3V0X3B1dDoKLQlkc3Rfc3RhdGVfcHV0KG5ldyk7Ci1lcnJfb3V0X3JlbGVhc2U6Ci0Jc29ja19yZWxlYXNlKHNvY2spOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBFYWNoIHNlcnZlcidzIGJsb2NrIHJlcXVlc3Qgc29tZXRpbWUgZmluaXNoZXMuCi0gKiBVc3VhbGx5IGl0IGhhcHBlbnMgaW4gaGFyZCBpcnEgY29udGV4dCBvZiB0aGUgYXBwcm9wcmlhdGUgY29udHJvbGxlciwKLSAqIHNvIHRvIHBsYXkgZ29vZCB3aXRoIGFsbCBjYXNlcyB3ZSBqdXN0IHF1ZXVlIEJJTyBpbnRvIHRoZSBxdWV1ZQotICogYW5kIHdha2UgdXAgcHJvY2Vzc2luZyB0aHJlYWQsIHdoaWNoIGdldHMgY29tcGxldGVkIHJlcXVlc3QgYW5kCi0gKiBzZW5kIChlbmNyeXB0aW5nIGlmIG5lZWRlZCkgaXQgYmFjayB0byB0aGUgY2xpZW50IChpZiBpdCB3YXMgYSByZWFkCi0gKiByZXF1ZXN0KSwgb3Igc2VuZHMgYmFjayByZXBseSB0aGF0IHdyaXRpbmcgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4KLSAqLwotc3RhdGljIGludCBkc3RfZXhwb3J0X3Byb2Nlc3NfcmVxdWVzdF9xdWV1ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBOVUxMOwotCXN0cnVjdCBiaW8gKmJpbzsKLQlpbnQgZXJyID0gMDsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnN0LT5yZXF1ZXN0X2xpc3QsCi0JCQkJc3RydWN0IGRzdF9leHBvcnRfcHJpdiwgcmVxdWVzdF9lbnRyeSk7Ci0JCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCi0JCWlmICghcCkKLQkJCWJyZWFrOwotCi0JCWJpbyA9IHAtPmJpbzsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKHN0LT5ub2RlKSAmJiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkpCi0JCQllcnIgPSBkc3RfZXhwb3J0X2NyeXB0byhzdC0+bm9kZSwgYmlvKTsKLQkJZWxzZQotCQkJZXJyID0gZHN0X2V4cG9ydF9zZW5kX2JpbyhiaW8pOwotCi0JCWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQ2xlYW51cCBleHBvcnQgc3RhdGUuCi0gKiBJdCBoYXMgdG8gd2FpdCB1bnRpbCBhbGwgcmVxdWVzdHMgYXJlIGZpbmlzaGVkLAotICogYW5kIHRoZW4gZnJlZSB0aGVtIGFsbC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogVGhpcyBsb29wIHdhaXRzIGZvciBhbGwgcGVuZGluZyBiaW9zIHRvIGJlIGNvbXBsZXRlZCBhbmQgZnJlZWQuCi0JICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA+IDEpIHsKLQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpLAotCQkJCWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKTsKLQkJd2FpdF9ldmVudF90aW1lb3V0KHN0LT50aHJlYWRfd2FpdCwKLQkJCQkoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID09IDEpIHx8Ci0JCQkJIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpLAotCQkJCUhaLzIpOwotCi0JCXdoaWxlICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKLQkJCXAgPSBOVUxMOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQkJCWlmICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKLQkJCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKLQkJCQkJc3RydWN0IGRzdF9leHBvcnRfcHJpdiwgcmVxdWVzdF9lbnRyeSk7Ci0JCQkJbGlzdF9kZWwoJnAtPnJlcXVlc3RfZW50cnkpOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCi0JCQlpZiAocCkKLQkJCQliaW9fcHV0KHAtPmJpbyk7Ci0KLQkJCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQsIGxpc3RfZW1wdHk6ICVkLCBwOiAiCi0JCQkJIiVwLlxuIiwgX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCi0JCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksIHApOwotCQl9Ci0JfQotCi0JZHN0X3N0YXRlX3B1dChzdCk7Ci19Ci0KLS8qCi0gKiBDbGllbnQgYWNjZXB0aW5nIHRocmVhZC4KLSAqIE5vdCBvbmx5IGFjY2VwdHMgbmV3IGNvbm5lY3Rpb24sIGJ1dCBhbHNvIHNjaGVkdWxlcyByZWNlaXZpbmcgdGhyZWFkCi0gKiBhbmQgcGVyZm9ybXMgcmVxdWVzdCBjb21wbGV0aW9uIGRlc2NyaWJlZCBhYm92ZS4KLSAqLwotc3RhdGljIGludCBkc3RfYWNjZXB0KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICptYWluX3N0ID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBpbml0X2RhdGE7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVycjsKLQotCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQgJiYgIW1haW5fc3QtPm5lZWRfZXhpdCkgewotCQlkcHJpbnRrKCIlczogbWFpbl9zdDogJXAsIG46ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QsIG4pOwotCQlzdCA9IGRzdF9hY2NlcHRfY2xpZW50KG1haW5fc3QpOwotCQlpZiAoSVNfRVJSKHN0KSkKLQkJCWNvbnRpbnVlOwotCi0JCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7Ci0JCWlmICghZXJyKSB7Ci0JCQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0KSB7Ci0JCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAotCQkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkgfHwKLQkJCQkJIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fAotCQkJCQlzdC0+bmVlZF9leGl0LAotCQkJCQlIWik7Ci0KLQkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCQlicmVhazsKLQotCQkJCWlmIChsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkKLQkJCQkJY29udGludWU7Ci0KLQkJCQllcnIgPSBkc3RfZXhwb3J0X3Byb2Nlc3NfcmVxdWVzdF9xdWV1ZShzdCk7Ci0JCQkJaWYgKGVycikKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXN0LT5uZWVkX2V4aXQgPSAxOwotCQkJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQkJfQotCi0JCWRzdF9zdGF0ZV9jbGVhbnVwX2V4cG9ydChzdCk7Ci0JfQotCi0JZHByaW50aygiJXM6IGZyZWVpbmcgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhtYWluX3N0KTsKLQlkc3RfcG9sbF9leGl0KG1haW5fc3QpOwotCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShtYWluX3N0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKG1haW5fc3QpOwotCWRzdF9zdGF0ZV9wdXQobWFpbl9zdCk7Ci0JZHByaW50aygiJXM6IGZyZWVkIGxpc3RlbmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc3Rfc3RhcnRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpZiAobGlzdF9lbXB0eSgmbi0+c2VjdXJpdHlfbGlzdCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgYXJlIHRyeWluZyB0byBleHBvcnQgbm9kZSAnJXMnICIKLQkJCQkid2l0aG91dCBzZWN1cml0eSBhdHRyaWJ1dGVzLlxuTm8gY2xpZW50cyB3aWxsICIKLQkJCQkiYmUgYWxsb3dlZCB0byBjb25uZWN0LiBFeGl0aW5nLlxuIiwgbi0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBsaXN0ZW5pbmcgc3RhdGUgYW5kIHNjaGVkdWxlIGFjY2VwdGluZyB0aHJlYWQuCi0gKi8KLWludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmbGUtPmN0bDsKLQotCW1lbWNweSgmbi0+aW5mby0+bmV0LCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0KLQlzdCA9IGRzdF9zdGF0ZV9hbGxvYyhuKTsKLQlpZiAoSVNfRVJSKHN0KSkgewotCQllcnIgPSBQVFJfRVJSKHN0KTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCW1lbWNweSgmc3QtPmN0bCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCi0JZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQlzdC0+c29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOwotCi0JZXJyID0ga2VybmVsX2JpbmQoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjdGwtPmFkZHIsCi0JCQljdGwtPmFkZHIuc2FfZGF0YV9sZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKLQotCWVyciA9IGtlcm5lbF9saXN0ZW4oc3QtPnNvY2tldCwgMTAyNCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOwotCW4tPnN0YXRlID0gc3Q7Ci0KLQllcnIgPSBkc3RfcG9sbF9pbml0KHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7Ci0KLQlkc3Rfc3RhdGVfZ2V0KHN0KTsKLQotCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsIGRzdF90aHJlYWRfc2V0dXAsCi0JCQlkc3RfYWNjZXB0LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wb2xsX2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9wb2xsX2V4aXQ6Ci0JZHN0X3BvbGxfZXhpdChzdCk7Ci1lcnJfb3V0X3NvY2tldF9yZWxlYXNlOgotCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7Ci1lcnJfb3V0X3B1dDoKLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLWVycl9vdXRfZXhpdDoKLQluLT5zdGF0ZSA9IE5VTEw7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEZyZWUgYmlvIGFuZCByZWxhdGVkIHByaXZhdGUgZGF0YS4KLSAqIEFsc28gZHJvcCBhIHJlZmVyZW5jZSBjb3VudGVyIGZvciBhcHByb3ByaWF0ZSBzdGF0ZSwKLSAqIHdoaWNoIHdhaXRzIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgYmxvY2sgSU9zIGluLWZsaWdodC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcHJpdiA9IGJpby0+YmlfcHJpdmF0ZTsKLQlpbnQgaTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJaWYgKCFidi0+YnZfcGFnZSkKLQkJCWJyZWFrOwotCi0JCV9fZnJlZV9wYWdlKGJ2LT5idl9wYWdlKTsKLQl9Ci0KLQlpZiAocHJpdikKLQkJZHN0X3N0YXRlX3B1dChwcml2LT5zdGF0ZSk7Ci0JYmlvX2ZyZWUoYmlvLCBkc3RfYmlvX3NldCk7Ci19Ci0KLS8qCi0gKiBCbG9jayBJTyBjb21wbGV0aW9uLiBRdWV1ZSByZXF1ZXN0IHRvIGJlIHNlbnQgYmFjayB0bwotICogdGhlIGNsaWVudCAob3IganVzdCBjb25maXJtYXRpb24pLgotICovCi1zdGF0aWMgdm9pZCBkc3RfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCi17Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHAtPnN0YXRlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJnAtPnJlcXVlc3RfZW50cnksICZzdC0+cmVxdWVzdF9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotfQotCi0vKgotICogQWxsb2NhdGUgcmVhZCByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCi17Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGVycjsKLQotCXdoaWxlICh0b3RhbF9zaXplKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIXBhZ2UpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOwotCi0JCWVyciA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOwotCQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCQlzaXplLCBlcnIpOwotCQlpZiAoZXJyIDw9IDApCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOwotCi0JCXRvdGFsX3NpemUgLT0gc2l6ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2UocGFnZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIHdyaXRlIHJlcXVlc3QgZm9yIHRoZSBzZXJ2ZXIuCi0gKiBTaG91bGQgbm90IG9ubHkgZ2V0IHBhZ2VzLCBidXQgYWxzbyByZWFkIGRhdGEgZnJvbSB0aGUgbmV0d29yay4KLSAqLwotc3RhdGljIGludCBkc3RfZXhwb3J0X3dyaXRlX3JlcXVlc3Qoc3RydWN0IGRzdF9zdGF0ZSAqc3QsCi0JCXN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCi17Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jdm9pZCAqZGF0YTsKLQlpbnQgZXJyOwotCi0Jd2hpbGUgKHRvdGFsX3NpemUpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWRhdGEgPSBrbWFwKHBhZ2UpOwotCQlpZiAoIWRhdGEpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOwotCi0JCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSwgdG90YWxfc2l6ZSk7Ci0KLQkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5tYXBfcGFnZTsKLQotCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7Ci0KLQkJa3VubWFwKHBhZ2UpOwotCi0JCXRvdGFsX3NpemUgLT0gc2l6ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF91bm1hcF9wYWdlOgotCWt1bm1hcChwYWdlKTsKLWVycl9vdXRfZnJlZV9wYWdlOgotCV9fZnJlZV9wYWdlKHBhZ2UpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBHcm9vdnksIHdlJ3ZlIGdvdHRlbiBhbiBJTyByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC4KLSAqIEFsbG9jYXRlIEJJTyBmcm9tIHRoZSBiaW9zZXQsIHByaXZhdGUgZGF0YSBmcm9tIHRoZSBtZW1wb29sCi0gKiBhbmQgbG90cyBvZiBwYWdlcyBmb3IgSU8uCi0gKi8KLWludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXY7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlpZiAodW5saWtlbHkoIW4tPmJkZXYpKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX0tFUk5FTCwKLQkJCVBBR0VfQUxJR04oY21kLT5zaXplKSA+PiBQQUdFX1NISUZULAotCQkJZHN0X2Jpb19zZXQpOwotCWlmICghYmlvKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXByaXYgPSAoc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqKSgoKHZvaWQgKiliaW8pIC0KLQkJCXNpemVvZiAoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOwotCi0JcHJpdi0+c3RhdGUgPSBkc3Rfc3RhdGVfZ2V0KHN0KTsKLQlwcml2LT5iaW8gPSBiaW87Ci0KLQliaW8tPmJpX3ByaXZhdGUgPSBwcml2OwotCWJpby0+YmlfZW5kX2lvID0gZHN0X2Jpb19lbmRfaW87Ci0JYmlvLT5iaV9kZXN0cnVjdG9yID0gZHN0X2Jpb19kZXN0cnVjdG9yOwotCWJpby0+YmlfYmRldiA9IG4tPmJkZXY7Ci0KLQkvKgotCSAqIFNlcnZlciBzaWRlIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0d28gbG93IGJpdHM6Ci0JICogdXB0b2RhdGUgKHNldCBieSBpdHNlbGYgYWN0dWFsbHkpIGFuZCBydyBibG9jawotCSAqLwotCWJpby0+YmlfZmxhZ3MgfD0gY21kLT5mbGFncyAmIDM7Ci0KLQliaW8tPmJpX3J3ID0gY21kLT5ydzsKLQliaW8tPmJpX3NpemUgPSAwOwotCWJpby0+Ymlfc2VjdG9yID0gY21kLT5zZWN0b3I7Ci0KLQlkc3RfYmlvX3RvX2NtZChiaW8sICZwcml2LT5jbWQsIERTVF9JT19SRVNQT05TRSwgY21kLT5pZCk7Ci0KLQlwcml2LT5jbWQuZmxhZ3MgPSAwOwotCXByaXYtPmNtZC5zaXplID0gY21kLT5zaXplOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCWVyciA9IGRzdF9yZWN2X2NkYXRhKHN0LCBwcml2LT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCQllcnIgPSBkc3RfZXhwb3J0X3dyaXRlX3JlcXVlc3Qoc3QsIGJpbywgY21kLT5zaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCi0JCQlyZXR1cm4gZHN0X2V4cG9ydF9jcnlwdG8obiwgYmlvKTsKLQl9IGVsc2UgewotCQllcnIgPSBkc3RfZXhwb3J0X3JlYWRfcmVxdWVzdChiaW8sIGNtZC0+c2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBkaXI6ICVsdSwgZmxhZ3M6ICVseCwgcGh5czogJWQuXG4iLAotCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCWJpby0+YmlfcncsIGJpb19kYXRhX2RpcihiaW8pLAotCQkJYmlvLT5iaV9mbGFncywgYmlvLT5iaV9waHlzX3NlZ21lbnRzKTsKLQotCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWJpb19wdXQoYmlvKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogT2ssIGJsb2NrIElPIGlzIHJlYWR5LCBsZXQncyBzZW5kIGl0IGJhY2sgdG8gdGhlIGNsaWVudC4uLgotICovCi1pbnQgZHN0X2V4cG9ydF9zZW5kX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHAtPnN0YXRlOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSAmcC0+Y21kOwotCWludCBlcnI7Ci0KLQlkcHJpbnRrKCIlczogaWQ6ICVsbHUsIGJpbzogJWxsdS8ldSwgY3NpemU6ICV1LCBmbGFnczogJWx1LCBydzogJWx1LlxuIiwKLQkJCV9fZnVuY19fLCBjbWQtPmlkLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQljbWQtPmNzaXplLCBiaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3J3KTsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmICghc3QtPnNvY2tldCkgewotCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJLyogLi4uIG9yIGp1c3QgY29uZmlybWF0aW9uIHRoYXQgd3JpdGluZyBoYXMgY29tcGxldGVkLiAqLwotCQljbWQtPnNpemUgPSBjbWQtPmNzaXplID0gMDsKLQkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAotCQkJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9IGVsc2UgewotCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsIGNtZCwgYmlvKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfQotCi0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfdW5sb2NrOgotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYTA1ZTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODQ0ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotLyoKLSAqIFBvbGxpbmcgbWFjaGluZXJ5LgotICovCi0KLXN0cnVjdCBkc3RfcG9sbF9oZWxwZXIgewotCXBvbGxfdGFibGUJCXB0OwotCXN0cnVjdCBkc3Rfc3RhdGUJKnN0OwotfTsKLQotc3RhdGljIGludCBkc3RfcXVldWVfd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsCi0JCWludCBzeW5jLCB2b2lkICprZXkpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IGRzdF9zdGF0ZSwgd2FpdCk7Ci0KLQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfcXVldWVfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLAotCQkJCSBwb2xsX3RhYmxlICpwdCkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdCwgc3RydWN0IGRzdF9wb2xsX2hlbHBlciwgcHQpLT5zdDsKLQotCXN0LT53aGVhZCA9IHdoZWFkOwotCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnN0LT53YWl0LCBkc3RfcXVldWVfd2FrZSk7Ci0JYWRkX3dhaXRfcXVldWUod2hlYWQsICZzdC0+d2FpdCk7Ci19Ci0KLXZvaWQgZHN0X3BvbGxfZXhpdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpZiAoc3QtPndoZWFkKSB7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKHN0LT53aGVhZCwgJnN0LT53YWl0KTsKLQkJc3QtPndoZWFkID0gTlVMTDsKLQl9Ci19Ci0KLWludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3RfcG9sbF9oZWxwZXIgcGg7Ci0KLQlwaC5zdCA9IHN0OwotCWluaXRfcG9sbF9mdW5jcHRyKCZwaC5wdCwgJmRzdF9xdWV1ZV9mdW5jKTsKLQotCXN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCAmcGgucHQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogSGVhZGVyIHJlY2VpdmluZyBmdW5jdGlvbiAtIG1heSBibG9jay4KLSAqLwotc3RhdGljIGludCBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGJsb2NrKQotewotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlpbnQgZXJyOwotCi0JaW92Lmlvdl9iYXNlID0gZGF0YTsKLQlpb3YuaW92X2xlbiA9IHNpemU7Ci0KLQltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OwotCW1zZy5tc2dfaW92bGVuID0gMTsKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfZmxhZ3MgPSAoYmxvY2spID8gTVNHX1dBSVRBTEwgOiBNU0dfRE9OVFdBSVQ7Ci0KLQllcnIgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKLQkJCW1zZy5tc2dfZmxhZ3MpOwotCWlmIChlcnIgIT0gc2l6ZSkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBIZWFkZXIgc2VuZGluZyBmdW5jdGlvbiAtIG1heSBibG9jay4KLSAqLwotaW50IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgbW9yZSkKLXsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qga3ZlYyBpb3Y7Ci0JaW50IGVycjsKLQotCWlvdi5pb3ZfYmFzZSA9IGRhdGE7Ci0JaW92Lmlvdl9sZW4gPSBzaXplOwotCi0JbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKLQltc2cubXNnX2lvdmxlbiA9IDE7Ci0JbXNnLm1zZ19uYW1lID0gTlVMTDsKLQltc2cubXNnX25hbWVsZW4gPSAwOwotCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0JbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEwgfCAobW9yZSA/IE1TR19NT1JFIDogMCk7Ci0KLQllcnIgPSBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbik7Ci0JaWYgKGVyciAhPSBzaXplKSB7Ci0JCWRwcmludGsoIiVzOiBzaXplOiAldSwgbW9yZTogJWQsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBzaXplLCBtb3JlLCBlcnIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBCbG9jayBhdXRvY29uZmlndXJhdGlvbjogcmVxdWVzdCBzaXplIG9mIHRoZSBzdG9yYWdlIGFuZCBwZXJtaXNzaW9ucy4KLSAqLwotc3RhdGljIGludCBkc3RfcmVxdWVzdF9yZW1vdGVfY29uZmlnKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCWludCBlcnIgPSAtRUlOVkFMOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQotCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOwotCWNtZC0+Y21kID0gRFNUX0NGRzsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGRzdF9kYXRhX3JlY3ZfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWlmIChjbWQtPmNtZCAhPSBEU1RfQ0ZHKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWRwcmludGsoIiVzOiBjaGVja2luZyByZXN1bHQ6IGNtZDogJWQsIHNpemUgcmVwb3J0ZWQ6ICVsbHUuXG4iLAotCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPnNlY3Rvcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChuLT5zaXplICE9IDApCi0JCW4tPnNpemUgPSBtaW5fdChsb2ZmX3QsIG4tPnNpemUsIGNtZC0+c2VjdG9yKTsKLQllbHNlCi0JCW4tPnNpemUgPSBjbWQtPnNlY3RvcjsKLQotCW4tPmluZm8tPnNpemUgPSBuLT5zaXplOwotCXN0LT5wZXJtaXNzaW9ucyA9IGNtZC0+cnc7Ci0KLW91dDoKLQlkcHJpbnRrKCIlczogbjogJXAsIGVycjogJWQsIHNpemU6ICVsbHUsIHBlcm1pc3Npb246ICV4LlxuIiwKLQkJCV9fZnVuY19fLCBuLCBlcnIsIG4tPnNpemUsIHN0LT5wZXJtaXNzaW9ucyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNvY2tldCBtYWNoaW5lcnkuCi0gKi8KLQotI2RlZmluZSBEU1RfREVGQVVMVF9USU1FTwkyMDAwMAotCi1pbnQgZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZzdC0+Y3RsOwotCi0JZXJyID0gc29ja19jcmVhdGUoY3RsLT5hZGRyLnNhX2ZhbWlseSwgY3RsLT50eXBlLCBjdGwtPnByb3RvLCAmc29jayk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzb2NrLT5zay0+c2tfc25kdGltZW8gPSBzb2NrLT5zay0+c2tfcmN2dGltZW8gPQotCQltc2Vjc190b19qaWZmaWVzKERTVF9ERUZBVUxUX1RJTUVPKTsKLQlzb2NrLT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9OT0lPOwotCi0Jc3QtPnNvY2tldCA9IHN0LT5yZWFkX3NvY2tldCA9IHNvY2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRwcmludGsoIiVzOiBzdDogJXAsIHNvY2tldDogJXAsIG46ICVwLlxuIiwKLQkJCV9fZnVuY19fLCBzdCwgc3QtPnNvY2tldCwgc3QtPm5vZGUpOwotCWlmIChzdC0+c29ja2V0KSB7Ci0JCXNvY2tfcmVsZWFzZShzdC0+c29ja2V0KTsKLQkJc3QtPnNvY2tldCA9IE5VTEw7Ci0JCXN0LT5yZWFkX3NvY2tldCA9IE5VTEw7Ci0JfQotfQotCi12b2lkIGRzdF9kdW1wX2FkZHIoc3RydWN0IHNvY2tldCAqc2ssIHN0cnVjdCBzb2NrYWRkciAqc2EsIGNoYXIgKnN0cikKLXsKLQlpZiAoc2stPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzICV1LiV1LiV1LiV1OiVkLlxuIiwgc3RyLAotCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLQl9IGVsc2UgaWYgKHNrLT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQlwcmludGsoS0VSTl9JTkZPICIlcyAlcGk2OiVkIiwKLQkJCXN0ciwgJnNpbi0+c2luNl9hZGRyLCBudG9ocyhzaW4tPnNpbjZfcG9ydCkpOwotCX0KLX0KLQotdm9pZCBkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaWYgKHN0LT5zb2NrZXQpIHsKLQkJZHN0X3BvbGxfZXhpdChzdCk7Ci0JCXN0LT5zb2NrZXQtPm9wcy0+c2h1dGRvd24oc3QtPnNvY2tldCwgMik7Ci0KLQkJZHN0X2R1bXBfYWRkcihzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnN0LT5jdGwuYWRkciwKLQkJCQkiRGlzY29ubmVjdGVkIHBlZXIiKTsKLQkJZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJnN0LT5jdGw7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQllcnIgPSBrZXJuZWxfY29ubmVjdChzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnN0LT5jdGwuYWRkciwKLQkJCXN0LT5jdGwuYWRkci5zYV9kYXRhX2xlbiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0KLQllcnIgPSBkc3RfcG9sbF9pbml0KHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQotCWRzdF9kdW1wX2FkZHIoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjdGwtPmFkZHIsCi0JCQkiQ29ubmVjdGVkIHRvIHBlZXIiKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3JlbGVhc2U6Ci0JZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0KTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU3RhdGUgcmVzZXQgaXMgdXNlZCB0byByZWNvbm5lY3QgdG8gdGhlIHJlbW90ZSBwZWVyLgotICogTWF5IGZhaWwsIGJ1dCB3aG8gY2FyZXMsIHdlIHdpbGwgdHJ5IGFnYWluIGxhdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotCWRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfcmVzZXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3QpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotfQotCi0vKgotICogQmFzaWMgbmV0d29yayBzZW5kaW5nL3JlY2VpdmluZyBmdW5jdGlvbnMuCi0gKiBCbG9ja2VkIG1vZGUgaXMgdXNlZC4KLSAqLwotc3RhdGljIGludCBkc3RfZGF0YV9yZWN2X3JhdyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqYnVmLCB1NjQgc2l6ZSkKLXsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qga3ZlYyBpb3Y7Ci0JaW50IGVycjsKLQotCUJVR19PTighc2l6ZSk7Ci0KLQlpb3YuaW92X2Jhc2UgPSBidWY7Ci0JaW92Lmlvdl9sZW4gPSBzaXplOwotCi0JbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKLQltc2cubXNnX2lvdmxlbiA9IDE7Ci0JbXNnLm1zZ19uYW1lID0gTlVMTDsKLQltc2cubXNnX25hbWVsZW4gPSAwOwotCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0JbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQltc2cubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUOwotCi0JZXJyID0ga2VybmVsX3JlY3Ztc2coc3QtPnNvY2tldCwgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4sCi0JCQltc2cubXNnX2ZsYWdzKTsKLQlpZiAoZXJyIDw9IDApIHsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byByZWN2IGRhdGE6IHNpemU6ICVsbHUsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBzaXplLCBlcnIpOwotCQlpZiAoZXJyID09IDApCi0JCQllcnIgPSAtRUNPTk5SRVNFVDsKLQotCQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBQaW5nIGNvbW1hbmQgdG8gZWFybHkgZGV0ZWN0IGZhaWxlZCBub2Rlcy4KLSAqLwotc3RhdGljIGludCBkc3Rfc2VuZF9waW5nKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlpbnQgZXJyID0gLUVDT05OUkVTRVQ7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKHN0LT5zb2NrZXQpIHsKLQkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSk7Ci0KLQkJY21kLT5jbWQgPSBfX2NwdV90b19iZTMyKERTVF9QSU5HKTsKLQotCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JfQotCWRwcmludGsoIiVzOiBzdDogJXAsIHNvY2tldDogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywKLQkJCXN0LCBzdC0+c29ja2V0LCBlcnIpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmluZyBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGVpdGhlciByZXR1cm4gZXJyb3Igb3IgcmVhZAotICogd2hvbGUgYmxvY2sgcmVxdWVzdC4gSWYgdGhlcmUgd2FzIG5vIHRyYWZmaWMgZm9yIGEgb25lIHNlY29uZCwKLSAqIHNlbmQgYSBwaW5nLCBzaW5jZSByZW1vdGUgbm9kZSBtYXkgZGllLgotICovCi1pbnQgZHN0X2RhdGFfcmVjdihzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgaW50IHJldmVudHMgPSAwOwotCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOwotCXVuc2lnbmVkIGludCBtYXNrID0gZXJyX21hc2sgfCBQT0xMSU47Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0JaW50IGVyciA9IDA7Ci0KLQl3aGlsZSAoc2l6ZSAmJiAhZXJyKSB7Ci0JCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7Ci0JCQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCQkJZm9yICg7OykgewotCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCwKLQkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCQkJaWYgKHJldmVudHMgJiBtYXNrKQotCQkJCQlicmVhazsKLQotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoIXNjaGVkdWxlX3RpbWVvdXQoSFopKSB7Ci0JCQkJCWVyciA9IGRzdF9zZW5kX3Bpbmcoc3QpOwotCQkJCQlpZiAoZXJyKQotCQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWZpbmlzaF93YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKLQkJfQotCi0JCWVyciA9IC1FQ09OTlJFU0VUOwotCQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0KLQkJaWYgKHN0LT5zb2NrZXQgJiYgKHN0LT5yZWFkX3NvY2tldCA9PSBzdC0+c29ja2V0KSAmJgotCQkJCShyZXZlbnRzICYgUE9MTElOKSkgewotCQkJZXJyID0gZHN0X2RhdGFfcmVjdl9yYXcoc3QsIGRhdGEsIHNpemUpOwotCQkJaWYgKGVyciA+IDApIHsKLQkJCQlkYXRhICs9IGVycjsKLQkJCQlzaXplIC09IGVycjsKLQkJCQllcnIgPSAwOwotCQkJfQotCQl9Ci0KLQkJaWYgKHJldmVudHMgJiBlcnJfbWFzayB8fCAhc3QtPnNvY2tldCkgewotCQkJZHByaW50aygiJXM6IHJldmVudHM6ICV4LCBzb2NrZXQ6ICVwLCBzaXplOiAldSwgIgotCQkJCQkiZXJyOiAlZC5cbiIsIF9fZnVuY19fLCByZXZlbnRzLAotCQkJCQlzdC0+c29ja2V0LCBzaXplLCBlcnIpOwotCQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCX0KLQotCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCkKLQkJCWVyciA9IC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNlbmQgYmxvY2sgYXV0b2NvbmYgcmVwbHkuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3Byb2Nlc3NfY2ZnKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlpbnQgZXJyOwotCi0JY21kLT5zZWN0b3IgPSBuLT5zaXplOwotCWNtZC0+cncgPSBzdC0+cGVybWlzc2lvbnM7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmUgYmxvY2sgSU8gZnJvbSB0aGUgbmV0d29yay4KLSAqLwotc3RhdGljIGludCBkc3RfcmVjdl9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBiaW8gKmJpbywKLQkJdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBpLCBlcnI7Ci0Jdm9pZCAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgc3o7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCXN6ID0gbWluKHRvdGFsX3NpemUsIGJ2LT5idl9sZW4pOwotCi0JCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHRvdGFsOiAldSwgbGVuOiAldSwgc3o6ICV1LCAiCi0JCQkJIm9mZjogJXUuXG4iLCBfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwKLQkJCQliaW8tPmJpX3NpemUsIHRvdGFsX3NpemUsIGJ2LT5idl9sZW4sIHN6LAotCQkJCWJ2LT5idl9vZmZzZXQpOwotCi0JCWRhdGEgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7Ci0JCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGRhdGEsIHN6KTsKLQkJa3VubWFwKGJ2LT5idl9wYWdlKTsKLQotCQlidi0+YnZfbGVuID0gc3o7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJdG90YWxfc2l6ZSAtPSBzejsKLQkJaWYgKHRvdGFsX3NpemUgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogT3VyIGJsb2NrIElPIGhhcyBqdXN0IGNvbXBsZXRlZCBhbmQgYXJyaXZlZDogZ2V0IGl0LgotICovCi1zdGF0aWMgaW50IGRzdF9wcm9jZXNzX2lvX3Jlc3BvbnNlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBiaW8gKmJpbzsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCXQgPSBkc3RfdHJhbnNfc2VhcmNoKG4sIGNtZC0+aWQpOwotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQlpZiAoIXQpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JYmlvID0gdC0+YmlvOwotCi0JZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgY21kX3NpemU6ICV1LCBjc2l6ZTogJXUsIGRpcjogJWx1LlxuIiwKLQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgY21kLT5zaXplLAotCQljbWQtPmNzaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkgewotCQlpZiAoYmlvLT5iaV9zaXplICE9IGNtZC0+c2l6ZSAtIGNtZC0+Y3NpemUpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKSB7Ci0JCQllcnIgPSBkc3RfcmVjdl9jZGF0YShzdCwgdC0+Y21kLmhhc2gpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGVycl9vdXRfZXhpdDsKLQkJfQotCi0JCWVyciA9IGRzdF9yZWN2X2JpbyhzdCwgdC0+YmlvLCBiaW8tPmJpX3NpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkKLQkJCXJldHVybiBkc3RfdHJhbnNfY3J5cHRvKHQpOwotCX0gZWxzZSB7Ci0JCWVyciA9IC1FQkFETVNHOwotCQlpZiAoY21kLT5zaXplIHx8IGNtZC0+Y3NpemUpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlkc3RfdHJhbnNfcmVtb3ZlKHQpOwotCWRzdF90cmFuc19wdXQodCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZlIGNyeXB0byBkYXRhLgotICovCi1pbnQgZHN0X3JlY3ZfY2RhdGEoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmNkYXRhKQotewotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmMgPSAmbi0+Y3J5cHRvOwotCWludCBlcnI7Ci0KLQlpZiAoY21kLT5jc2l6ZSAhPSBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSkgewotCQlkcHJpbnRrKCIlczogY21kOiBjbWQ6ICV1LCBzZWN0b3I6ICVsbHUsIHNpemU6ICV1LCAiCi0JCQkJImNzaXplOiAldSAhPSBkaWdlc3Qgc2l6ZSAldS5cbiIsCi0JCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPnNlY3RvciwgY21kLT5zaXplLAotCQkJCWNtZC0+Y3NpemUsIGMtPmNyeXB0b19hdHRhY2hlZF9zaXplKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgY2RhdGEsIGNtZC0+Y3NpemUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JY21kLT5zaXplIC09IGNtZC0+Y3NpemU7Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSB0aGUgY29tbWFuZCBhbmQgc3RhcnQgaXRzIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlY3ZfcHJvY2Vzc2luZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpbnQgZXJyID0gLUVJTlRSOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQotCS8qCi0JICogSWYgc29ja2V0IHdpbGwgYmUgcmVzZXQgYWZ0ZXIgdGhpcyBzdGF0ZW1lbnQsIHRoZW4KLQkgKiBkc3RfZGF0YV9yZWN2KCkgd2lsbCBqdXN0IGZhaWwgYW5kIGxvb3Agd2lsbAotCSAqIHN0YXJ0IGFnYWluLCBzbyBpdCBjYW4gYmUgZG9uZSB3aXRob3V0IGFueSBsb2Nrcy4KLQkgKgotCSAqIHN0LT5yZWFkX3NvY2tldCBpcyBuZWVkZWQgdG8gcHJldmVudHMgc3RhdGUgbWFjaGluZQotCSAqIGJyZWFraW5nIGJldHdlZW4gdGhpcyBkYXRhIHJlYWRpbmcgYW5kIHN1YnNlcXVlbnQgb25lCi0JICogaW4gcHJvdG9jb2wgc3BlY2lmaWMgZnVuY3Rpb25zIGR1cmluZyBjb25uZWN0aW9uIHJlc2V0LgotCSAqIEluIGNhc2Ugb2YgcmVzZXQgd2UgaGF2ZSB0byByZWFkIG5leHQgY29tbWFuZCBhbmQgZG8KLQkgKiBub3QgZXhwZWN0IGRhdGEgZm9yIG9sZCBjb21tYW5kIHRvIG1hZ2ljYWxseSBhcHBlYXIgaW4KLQkgKiBuZXcgY29ubmVjdGlvbi4KLQkgKi8KLQlzdC0+cmVhZF9zb2NrZXQgPSBzdC0+c29ja2V0OwotCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZXhpdDsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JZHByaW50aygiJXM6IGNtZDogJXUsIHNpemU6ICV1LCBjc2l6ZTogJXUsIGlkOiAlbGx1LCAiCi0JCQkic2VjdG9yOiAlbGx1LCBmbGFnczogJWxseCwgcnc6ICVsbHguXG4iLAotCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPnNpemUsCi0JCQljbWQtPmNzaXplLCBjbWQtPmlkLCBjbWQtPnNlY3RvciwKLQkJCWNtZC0+ZmxhZ3MsIGNtZC0+cncpOwotCi0JLyoKLQkgKiBUaGlzIHNob3VsZCBjYXRjaCBwcm90b2NvbCBicmVha2FnZSBhbmQgcmFuZG9tIGdhcmJhZ2UKLQkgKiBpbnN0ZWFkIG9mIGNvbW1hbmRzLgotCSAqLwotCWlmICh1bmxpa2VseShjbWQtPmNzaXplID4gc3QtPnNpemUgLSBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKSkgewotCQllcnIgPSAtRUJBRE1TRzsKLQkJZ290byBvdXRfZXhpdDsKLQl9Ci0KLQllcnIgPSAtRVBST1RPOwotCXN3aXRjaCAoY21kLT5jbWQpIHsKLQljYXNlIERTVF9JT19SRVNQT05TRToKLQkJZXJyID0gZHN0X3Byb2Nlc3NfaW9fcmVzcG9uc2Uoc3QpOwotCQlicmVhazsKLQljYXNlIERTVF9JTzoKLQkJZXJyID0gZHN0X3Byb2Nlc3NfaW8oc3QpOwotCQlicmVhazsKLQljYXNlIERTVF9DRkc6Ci0JCWVyciA9IGRzdF9wcm9jZXNzX2NmZyhzdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNUX1BJTkc6Ci0JCWVyciA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmluZyB0aHJlYWQuIEZvciB0aGUgY2xpZW50IG5vZGUgd2Ugc2hvdWxkIHRyeSB0byByZWNvbm5lY3QsCi0gKiBmb3IgYWNjZXB0ZWQgY2xpZW50IHdlIGp1c3QgZHJvcCB0aGUgc3RhdGUgYW5kIGV4cGVjdCBpdCB0byByZWNvbm5lY3QuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlY3Yodm9pZCAqaW5pdF9kYXRhLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBpbml0X2RhdGE7Ci0JaW50IGVyciA9IDA7Ci0KLQlkcHJpbnRrKCIlczogc3RhcnQgc3Q6ICVwLCBuOiAlcCwgc2NhbjogJWx1LCBuZWVkX2V4aXQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBzdCwgbiwgbi0+dHJhbnNfc2Nhbl90aW1lb3V0LCBzdC0+bmVlZF9leGl0KTsKLQotCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQgJiYgIXN0LT5uZWVkX2V4aXQpIHsKLQkJZXJyID0gZHN0X3JlY3ZfcHJvY2Vzc2luZyhzdCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlpZiAoIXN0LT5jdGwudHlwZSkKLQkJCQlicmVhazsKLQotCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQlicmVhazsKLQotCQkJZHN0X3N0YXRlX3Jlc2V0KHN0KTsKLQkJCW1zbGVlcCgxMDAwKTsKLQkJfQotCX0KLQotCXN0LT5uZWVkX2V4aXQgPSAxOwotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQlkcHJpbnRrKCIlczogZnJlZWluZyByZWNlaXZpbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7Ci0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0JZHN0X3N0YXRlX3B1dChzdCk7Ci0KLQlkcHJpbnRrKCIlczogZnJlZWQgcmVjZWl2aW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIE5ldHdvcmsgc3RhdGUgZGllcyBoZXJlIGFuZCBib3JucyBjb3VwbGUgb2YgbGluZXMgYmVsb3cuCi0gKiBUaGlzIG9iamVjdCBpcyB0aGUgbWFpbiBuZXR3b3JrIHN0YXRlIHByb2Nlc3NpbmcgZW5naW5lOgotICogc2VuZGluZywgcmVjZWl2aW5nLCByZWNvbm5lY3Rpb25zLCBhbGwgbmV0d29yayByZWxhdGVkCi0gKiB0YXNrcyBhcmUgaGFuZGxlZCBvbiBiZWhhbGYgb2YgdGhlIHN0YXRlLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfc3RhdGVfZnJlZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkcHJpbnRrKCIlczogc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKLQlpZiAoc3QtPmNsZWFudXApCi0JCXN0LT5jbGVhbnVwKHN0KTsKLQlrZnJlZShzdC0+ZGF0YSk7Ci0Ja2ZyZWUoc3QpOwotfQotCi1zdHJ1Y3QgZHN0X3N0YXRlICpkc3Rfc3RhdGVfYWxsb2Moc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlzdC0+bm9kZSA9IG47Ci0Jc3QtPm5lZWRfZXhpdCA9IDA7Ci0KLQlzdC0+c2l6ZSA9IFBBR0VfU0laRTsKLQlzdC0+ZGF0YSA9IGttYWxsb2Moc3QtPnNpemUsIEdGUF9LRVJORUwpOwotCWlmICghc3QtPmRhdGEpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnN0LT5yZXF1ZXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzdC0+cmVxdWVzdF9saXN0KTsKLQotCW11dGV4X2luaXQoJnN0LT5zdGF0ZV9sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdC0+dGhyZWFkX3dhaXQpOwotCi0JLyoKLQkgKiBPbmUgZm9yIHByb2Nlc3NpbmcgdGhyZWFkLCBhbm90aGVyIG9uZSBmb3Igbm9kZSBpdHNlbGYuCi0JICovCi0JYXRvbWljX3NldCgmc3QtPnJlZmNudCwgMik7Ci0KLQlkcHJpbnRrKCIlczogc3Q6ICVwLCBuOiAlcC5cbiIsIF9fZnVuY19fLCBzdCwgc3QtPm5vZGUpOwotCi0JcmV0dXJuIHN0OwotCi1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUoc3QpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLWludCBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JcmV0dXJuIHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUoc3QtPm5vZGUtPnBvb2wsIGRzdF90aHJlYWRfc2V0dXAsCi0JCQlkc3RfcmVjdiwgc3QsIE1BWF9TQ0hFRFVMRV9USU1FT1VULCBzdC0+bm9kZSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNsaWVudCdzIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBwZWVyOiBhbGxvY2F0ZSBzdGF0ZSwKLSAqIGNvbm5lY3QgYW5kIHBlcmZvcm0gYmxvY2sgSU8gYXV0b2NvbmZpZ3VyYXRpb24uCi0gKi8KLWludCBkc3Rfbm9kZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfbmV0d29ya19jdGwgKnIpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlzdCA9IGRzdF9zdGF0ZV9hbGxvYyhuKTsKLQlpZiAoSVNfRVJSKHN0KSkgewotCQllcnIgPSBQVFJfRVJSKHN0KTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCW1lbWNweSgmc3QtPmN0bCwgciwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQotCWVyciA9IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWVfZGF0YTsKLQotCWVyciA9IGRzdF9yZXF1ZXN0X3JlbW90ZV9jb25maWcoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0X2Nvbm5lY3RlZDsKLQluLT5zdGF0ZSA9IHN0OwotCi0JZXJyID0gZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdF9jb25uZWN0ZWQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0X2Nvbm5lY3RlZDoKLQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotZXJyX291dF9mcmVlX2RhdGE6Ci0JZHN0X3N0YXRlX2ZyZWUoc3QpOwotZXJyX291dF9leGl0OgotCW4tPnN0YXRlID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIGRzdF9zdGF0ZV9wdXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN0LT5yZWZjbnQpKQotCQlkc3Rfc3RhdGVfZnJlZShzdCk7Ci19Ci0KLS8qCi0gKiBTZW5kIGJsb2NrIElPIHRvIHRoZSBuZXR3b3JrIG9uZSBieSBvbmUgdXNpbmcgemVyby1jb3B5IC0+c2VuZHBhZ2UoKS4KLSAqLwotaW50IGRzdF9zZW5kX2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGRzdF9jbWQgKmNtZCwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmMgPSAmc3QtPm5vZGUtPmNyeXB0bzsKLQlpbnQgZXJyLCBpID0gMDsKLQlpbnQgZmxhZ3MgPSBNU0dfV0FJVEFMTDsKLQotCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwKLQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSArIGMtPmNyeXB0b19hdHRhY2hlZF9zaXplLCBiaW8tPmJpX3ZjbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlpZiAoaSA8IGJpby0+YmlfdmNudCAtIDEpCi0JCQlmbGFncyB8PSBNU0dfTU9SRTsKLQotCQllcnIgPSBrZXJuZWxfc2VuZHBhZ2Uoc3QtPnNvY2tldCwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9vZmZzZXQsCi0JCQkJYnYtPmJ2X2xlbiwgZmxhZ3MpOwotCQlpZiAoZXJyIDw9IDApCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWRwcmludGsoIiVzOiAlZC8lZCwgZmxhZ3M6ICV4LCBlcnI6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBpLCBiaW8tPmJpX3ZjbnQsIGZsYWdzLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTZW5kIHRyYW5zYWN0aW9uIHRvIHRoZSByZW1vdGUgcGVlci4KLSAqLwotaW50IGRzdF90cmFuc19zZW5kKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHQtPm4tPnN0YXRlOwotCXN0cnVjdCBiaW8gKmJpbyA9IHQtPmJpbzsKLQotCWRzdF9jb252ZXJ0X2NtZCgmdC0+Y21kKTsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoIXN0LT5zb2NrZXQpIHsKLQkJZXJyID0gZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfQotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCWVyciA9IGRzdF9zZW5kX2JpbyhzdCwgJnQtPmNtZCwgdC0+YmlvKTsKLQl9IGVsc2UgewotCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCAmdC0+Y21kLAotCQkJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCX0KLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcmVzZXQ7Ci0KLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF9yZXNldDoKLQlkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0KTsKLWVycl9vdXRfdW5sb2NrOgotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlhODJiMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLS8qCi0gKiBUaHJlYWQgcG9vbCBhYnN0cmFjdGlvbiBhbGxvd3MgdG8gc2NoZWR1bGUgYSB3b3JrIHRvIGJlIHBlcmZvcm1lZAotICogb24gYmVoYWxmIG9mIGtlcm5lbCB0aHJlYWQuIE9uZSBkb2VzIG5vdCBvcGVyYXRlIHdpdGggdGhyZWFkcyBpdHNlbGYsCi0gKiBpbnN0ZWFkIHVzZXIgcHJvdmlkZXMgc2V0dXAgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGZvciB0aHJlYWQgcG9vbCBpdHNlbGYsCi0gKiBhbmQgYWN0aW9uIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgZWFjaCBzdWJtaXR0ZWQgd29yay4KLSAqCi0gKiBFYWNoIHdvcmtlciBoYXMgcHJpdmF0ZSBkYXRhIGluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgYW5kIGRhdGEsCi0gKiBwcm92aWRlZCBieSB1c2VyIGF0IHNjaGVkdWxpbmcgdGltZS4KLSAqCi0gKiBXaGVuIGFjdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHRocmVhZCBjYW4gbm90IGJlIHVzZWQgYnkgb3RoZXIgdXNlcnMsCi0gKiBpbnN0ZWFkIHRoZXkgd2lsbCBzbGVlcCB1bnRpbCB0aGVyZSBpcyBmcmVlIHRocmVhZCB0byBwaWNrIHRoZWlyIHdvcmsuCi0gKi8KLXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgewotCXN0cnVjdCBsaXN0X2hlYWQJd29ya2VyX2VudHJ5OwotCi0Jc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7Ci0KLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wJKnBvb2w7Ci0KLQlpbnQJCQllcnJvcjsKLQlpbnQJCQloYXNfZGF0YTsKLQlpbnQJCQluZWVkX2V4aXQ7Ci0JdW5zaWduZWQgaW50CQlpZDsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Ci0KLQl2b2lkCQkJKnByaXZhdGU7Ci0Jdm9pZAkJCSpzY2hlZHVsZV9kYXRhOwotCi0JaW50CQkJKCphY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpOwotCXZvaWQJCQkoKmNsZWFudXApKHZvaWQgKnByaXZhdGUpOwotfTsKLQotc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKLXsKLQlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKLQotCXctPmNsZWFudXAody0+cHJpdmF0ZSk7Ci0Ja2ZyZWUodyk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgdG8gbWFyayB0aHJlYWQgYXMgcmVhZHkgYW5kIGFsbG93IHVzZXJzIHRvIHNjaGVkdWxlIG5ldyB3b3JrLgotICovCi1zdGF0aWMgdm9pZCB0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeShzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3KQotewotCXN0cnVjdCB0aHJlYWRfcG9vbCAqcCA9IHctPnBvb2w7Ci0KLQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQlpZiAoIXctPm5lZWRfZXhpdCkgewotCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7Ci0JCXctPmhhc19kYXRhID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQkJd2FrZV91cCgmcC0+d2FpdCk7Ci0JfSBlbHNlIHsKLQkJcC0+dGhyZWFkX251bS0tOwotCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci0JfQotfQotCi0vKgotICogVGhyZWFkIGFjdGlvbiBsb29wOiB3YWl0cyB1bnRpbCB0aGVyZSBpcyBuZXcgd29yay4KLSAqLwotc3RhdGljIGludCB0aHJlYWRfcG9vbF93b3JrZXJfZnVuYyh2b2lkICpkYXRhKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBkYXRhOwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHctPndhaXQsCi0JCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdy0+aGFzX2RhdGEpOwotCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKLQotCQlpZiAoIXctPmhhc19kYXRhKQotCQkJY29udGludWU7Ci0KLQkJdy0+YWN0aW9uKHctPnByaXZhdGUsIHctPnNjaGVkdWxlX2RhdGEpOwotCQl0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeSh3KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZSBzaW5nbGUgd29ya2VyIHdpdGhvdXQgc3BlY2lmeWluZyB3aGljaCBvbmUuCi0gKi8KLXZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdyA9IE5VTEw7Ci0KLQl3aGlsZSAoIXcgJiYgcC0+dGhyZWFkX251bSkgewotCQl3YWl0X2V2ZW50KHAtPndhaXQsICFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSB8fAotCQkJCSFwLT50aHJlYWRfbnVtKTsKLQotCQlkcHJpbnRrKCIlczogbG9ja2luZyBsaXN0X2VtcHR5OiAlZCwgdGhyZWFkX251bTogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSwKLQkJCQlwLT50aHJlYWRfbnVtKTsKLQotCQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCkpIHsKLQkJCXcgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwLT5yZWFkeV9saXN0LAotCQkJCQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyLAotCQkJCQl3b3JrZXJfZW50cnkpOwotCi0JCQlkcHJpbnRrKCIlczogZGVsZXRpbmcgdzogJXAsIHRocmVhZF9udW06ICVkLCAiCi0JCQkJCSJsaXN0OiAlcCBbJXAuJXBdLlxuIiwgX19mdW5jX18sCi0JCQkJCXcsIHAtPnRocmVhZF9udW0sICZwLT5yZWFkeV9saXN0LAotCQkJCQlwLT5yZWFkeV9saXN0LnByZXYsIHAtPnJlYWR5X2xpc3QubmV4dCk7Ci0KLQkJCXAtPnRocmVhZF9udW0tLTsKLQkJCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCX0KLQotCWlmICh3KQotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLQlkcHJpbnRrKCIlczogZGVsZXRlZCB3OiAlcCwgdGhyZWFkX251bTogJWQuXG4iLAotCQkJX19mdW5jX18sIHcsIHAtPnRocmVhZF9udW0pOwotfQotCi0vKgotICogUmVtb3ZlIGEgd29ya2VyIHdpdGggZ2l2ZW4gSUQuCi0gKi8KLXZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsIHVuc2lnbmVkIGludCBpZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3OwotCWludCBmb3VuZCA9IDA7Ci0KLQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmcC0+cmVhZHlfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCWlmICh3LT5pZCA9PSBpZCkgewotCQkJZm91bmQgPSAxOwotCQkJcC0+dGhyZWFkX251bS0tOwotCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmcC0+YWN0aXZlX2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQkJaWYgKHctPmlkID09IGlkKSB7Ci0JCQkJdy0+bmVlZF9leGl0ID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCWlmIChmb3VuZCkKLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci19Ci0KLS8qCi0gKiBBZGQgbmV3IHdvcmtlciB0aHJlYWQgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLgotICogSWYgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZmFpbHMsIHJldHVybiBlcnJvci4KLSAqLwotaW50IHRocmVhZF9wb29sX2FkZF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQljaGFyICpuYW1lLAotCQl1bnNpZ25lZCBpbnQgaWQsCi0JCXZvaWQgKigqaW5pdCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKCpjbGVhbnVwKSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JdyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXcpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jdy0+cG9vbCA9IHA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmdy0+d2FpdCk7Ci0Jdy0+Y2xlYW51cCA9IGNsZWFudXA7Ci0Jdy0+aWQgPSBpZDsKLQotCXctPnRocmVhZCA9IGt0aHJlYWRfcnVuKHRocmVhZF9wb29sX3dvcmtlcl9mdW5jLCB3LCAiJXMiLCBuYW1lKTsKLQlpZiAoSVNfRVJSKHctPnRocmVhZCkpIHsKLQkJZXJyID0gUFRSX0VSUih3LT50aHJlYWQpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQl3LT5wcml2YXRlID0gaW5pdChwcml2YXRlKTsKLQlpZiAoSVNfRVJSKHctPnByaXZhdGUpKSB7Ci0JCWVyciA9IFBUUl9FUlIody0+cHJpdmF0ZSk7Ci0JCWdvdG8gZXJyX291dF9zdG9wX3RocmVhZDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7Ci0JcC0+dGhyZWFkX251bSsrOwotCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfc3RvcF90aHJlYWQ6Ci0Ja3RocmVhZF9zdG9wKHctPnRocmVhZCk7Ci1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUodyk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERlc3Ryb3kgdGhlIHdob2xlIHBvb2wuCi0gKi8KLXZvaWQgdGhyZWFkX3Bvb2xfZGVzdHJveShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApCi17Ci0Jd2hpbGUgKHAtPnRocmVhZF9udW0pIHsKLQkJZHByaW50aygiJXM6IG51bTogJWQuXG4iLCBfX2Z1bmNfXywgcC0+dGhyZWFkX251bSk7Ci0JCXRocmVhZF9wb29sX2RlbF93b3JrZXIocCk7Ci0JfQotCi0Ja2ZyZWUocCk7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBwb29sIHdpdGggZ2l2ZW4gbnVtYmVyIG9mIHRocmVhZHMuCi0gKiBUaGV5IHdpbGwgaGF2ZSBzZXF1ZW50aWFsIElEcyBzdGFydGVkIGZyb20gemVyby4KLSAqLwotc3RydWN0IHRocmVhZF9wb29sICp0aHJlYWRfcG9vbF9jcmVhdGUoaW50IG51bSwgY2hhciAqbmFtZSwKLQkJdm9pZCAqKCppbml0KSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAoKmNsZWFudXApKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICpwcml2YXRlKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXA7Ci0Jc3RydWN0IHRocmVhZF9wb29sICpwOwotCWludCBlcnIgPSAtRU5PTUVNOwotCWludCBpOwotCi0JcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfcG9vbCksIEdGUF9LRVJORUwpOwotCWlmICghcCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwLT53YWl0KTsKLQltdXRleF9pbml0KCZwLT50aHJlYWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPnJlYWR5X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwLT5hY3RpdmVfbGlzdCk7Ci0JcC0+dGhyZWFkX251bSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLQkJZXJyID0gdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihwLCBuYW1lLCBpLCBpbml0LAotCQkJCWNsZWFudXAsIHByaXZhdGUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfYWxsOwotCX0KLQotCXJldHVybiBwOwotCi1lcnJfb3V0X2ZyZWVfYWxsOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCB0bXAsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotCX0KLQlrZnJlZShwKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi0vKgotICogU2NoZWR1bGUgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gb24gYSBnaXZlbiB0aHJlYWQsCi0gKiBwcm92aWRlZCBJRCBwb2ludGVyIGhhcyB0byBtYXRjaCBwcmV2aW91c2x5IHN0b3JlZAotICogcHJpdmF0ZSBkYXRhLgotICovCi1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKnNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJaW50ICgqYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0LCB2b2lkICppZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3LCAqdG1wLCAqd29ya2VyID0gTlVMTDsKLQlpbnQgZXJyID0gMDsKLQotCXdoaWxlICghd29ya2VyICYmICFlcnIpIHsKLQkJdGltZW91dCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHAtPndhaXQsCi0JCQkJIWxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpLAotCQkJCXRpbWVvdXQpOwotCi0JCWlmICghdGltZW91dCkgewotCQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJd29ya2VyID0gTlVMTDsKLQkJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgdG1wLCAmcC0+cmVhZHlfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCQlpZiAoaWQgJiYgaWQgIT0gdy0+cHJpdmF0ZSkKLQkJCQljb250aW51ZTsKLQotCQkJd29ya2VyID0gdzsKLQotCQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPmFjdGl2ZV9saXN0KTsKLQotCQkJZXJyID0gc2V0dXAody0+cHJpdmF0ZSwgZGF0YSk7Ci0JCQlpZiAoIWVycikgewotCQkJCXctPnNjaGVkdWxlX2RhdGEgPSBkYXRhOwotCQkJCXctPmFjdGlvbiA9IGFjdGlvbjsKLQkJCQl3LT5oYXNfZGF0YSA9IDE7Ci0JCQkJd2FrZV91cCgmdy0+d2FpdCk7Ci0JCQl9IGVsc2UgewotCQkJCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksCi0JCQkJCQkmcC0+cmVhZHlfbGlzdCk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTY2hlZHVsZSBleGVjdXRpb24gb24gYXJiaXRyYXJ5IHRocmVhZCBmcm9tIHRoZSBwb29sLgotICovCi1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCpzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCWludCAoKmFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCkKLXsKLQlyZXR1cm4gdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShwLCBzZXR1cCwKLQkJCWFjdGlvbiwgZGF0YSwgdGltZW91dCwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMzZhNmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotCi0vKgotICogVHJhbnNhY3Rpb24gbWVtb3J5IHBvb2wgc2l6ZS4KLSAqLwotc3RhdGljIGludCBkc3RfbWVtcG9vbF9udW0gPSAzMjsKLW1vZHVsZV9wYXJhbShkc3RfbWVtcG9vbF9udW0sIGludCwgMDY0NCk7Ci0KLS8qCi0gKiBUcmFuc2FjdGlvbiB0cmVlIG1hbmFnZW1lbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGRzdF90cmFuc19jbXAoZHN0X2dlbl90IGdlbiwgZHN0X2dlbl90IG5ldykKLXsKLQlpZiAoZ2VuIDwgbmV3KQotCQlyZXR1cm4gMTsKLQlpZiAoZ2VuID4gbmV3KQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBkc3RfdHJhbnMgKmRzdF90cmFuc19zZWFyY2goc3RydWN0IGRzdF9ub2RlICpub2RlLCBkc3RfZ2VuX3QgZ2VuKQotewotCXN0cnVjdCByYl9yb290ICpyb290ID0gJm5vZGUtPnRyYW5zX3Jvb3Q7Ci0Jc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQsICpyZXQgPSBOVUxMOwotCWludCBjbXA7Ci0KLQl3aGlsZSAobikgewotCQl0ID0gcmJfZW50cnkobiwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWNtcCA9IGRzdF90cmFuc19jbXAodC0+Z2VuLCBnZW4pOwotCQlpZiAoY21wIDwgMCkKLQkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPiAwKQotCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCXJldCA9IHQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWRwcmludGsoIiVzOiAlcyB0cmFuc2FjdGlvbjogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywKLQkJCShyZXQpID8gImZvdW5kIiA6ICJub3QgZm91bmQiLCBnZW4pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkc3RfdHJhbnNfaW5zZXJ0KHN0cnVjdCBkc3RfdHJhbnMgKm5ldykKLXsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZuZXctPm4tPnRyYW5zX3Jvb3Q7Ci0Jc3RydWN0IHJiX25vZGUgKipuID0gJnJvb3QtPnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBkc3RfdHJhbnMgKnJldCA9IE5VTEwsICp0OwotCWludCBjbXA7Ci0KLQl3aGlsZSAoKm4pIHsKLQkJcGFyZW50ID0gKm47Ci0KLQkJdCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWNtcCA9IGRzdF90cmFuc19jbXAodC0+Z2VuLCBuZXctPmdlbik7Ci0JCWlmIChjbXAgPCAwKQotCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNtcCA+IDApCi0JCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJcmV0ID0gdDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JbmV3LT5zZW5kX3RpbWUgPSBqaWZmaWVzOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGlzdDogb2xkOiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgIgotCQkJInNlbmRfdGltZTogJWx1LCBuZXc6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCAiCi0JCQkic2VuZF90aW1lOiAlbHUuXG4iLCBfX2Z1bmNfXywKLQkJCXJldC0+Z2VuLCAodTY0KXJldC0+YmlvLT5iaV9zZWN0b3IsCi0JCQlyZXQtPmJpby0+Ymlfc2l6ZSwgcmV0LT5zZW5kX3RpbWUsCi0JCQluZXctPmdlbiwgKHU2NCluZXctPmJpby0+Ymlfc2VjdG9yLAotCQkJbmV3LT5iaW8tPmJpX3NpemUsIG5ldy0+c2VuZF90aW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZuZXctPnRyYW5zX2VudHJ5LCBwYXJlbnQsIG4pOwotCXJiX2luc2VydF9jb2xvcigmbmV3LT50cmFuc19lbnRyeSwgcm9vdCk7Ci0KLQlkcHJpbnRrKCIlczogaW5zZXJ0ZWQ6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBzZW5kX3RpbWU6ICVsdS5cbiIsCi0JCV9fZnVuY19fLCBuZXctPmdlbiwgKHU2NCluZXctPmJpby0+Ymlfc2VjdG9yLAotCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHQtPm47Ci0KLQlpZiAodC0+dHJhbnNfZW50cnkucmJfcGFyZW50X2NvbG9yKSB7Ci0JCXJiX2VyYXNlKCZ0LT50cmFuc19lbnRyeSwgJm4tPnRyYW5zX3Jvb3QpOwotCQl0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IgPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzdF90cmFuc19yZW1vdmUoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHQtPm47Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQlyZXQgPSBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFdoZW4gdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIGFuZCB0aGVyZSBhcmUgbm8gbW9yZSB1c2VycywKLSAqIHdlIGNvbXBsZXRlIGFwcHJpYXRlIGJsb2NrIElPIHJlcXVlc3Qgd2l0aCBnaXZlbiBlcnJvciBzdGF0dXMuCi0gKi8KLXZvaWQgZHN0X3RyYW5zX3B1dChzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0LT5yZWZjbnQpKSB7Ci0JCXN0cnVjdCBiaW8gKmJpbyA9IHQtPmJpbzsKLQotCQlkcHJpbnRrKCIlczogY29tcGxldGVkIHQ6ICVwLCBnZW46ICVsbHUsIGJpbzogJXAuXG4iLAotCQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIGJpbyk7Ci0KLQkJYmlvX2VuZGlvKGJpbywgdC0+ZXJyb3IpOwotCQliaW9fcHV0KGJpbyk7Ci0KLQkJZHN0X25vZGVfcHV0KHQtPm4pOwotCQltZW1wb29sX2ZyZWUodCwgdC0+bi0+dHJhbnNfcG9vbCk7Ci0JfQotfQotCi0vKgotICogUHJvY2VzcyBnaXZlbiBibG9jayBJTyByZXF1ZXN0OiBhbGxvY2F0ZSB0cmFuc2FjdGlvbiwgaW5zZXJ0IGl0IGludG8gdGhlIHRyZWUKLSAqIGFuZCBzZW5kL3NjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nLgotICovCi1pbnQgZHN0X3Byb2Nlc3NfYmlvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQl0ID0gbWVtcG9vbF9hbGxvYyhuLT50cmFuc19wb29sLCBHRlBfTk9GUyk7Ci0JaWYgKCF0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXQtPm4gPSBkc3Rfbm9kZV9nZXQobik7Ci0JdC0+YmlvID0gYmlvOwotCXQtPmVycm9yID0gMDsKLQl0LT5yZXRyaWVzID0gMDsKLQlhdG9taWNfc2V0KCZ0LT5yZWZjbnQsIDEpOwotCXQtPmdlbiA9IGF0b21pY19sb25nX2luY19yZXR1cm4oJm4tPmdlbik7Ci0KLQl0LT5lbmMgPSBiaW9fZGF0YV9kaXIoYmlvKTsKLQlkc3RfYmlvX3RvX2NtZChiaW8sICZ0LT5jbWQsIERTVF9JTywgdC0+Z2VuKTsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCWVyciA9IGRzdF90cmFuc19pbnNlcnQodCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWRwcmludGsoIiVzOiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgZGlyL2VuYzogJWQsIG5lZWRfY3J5cHRvOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgdC0+Z2VuLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJYmlvLT5iaV9zaXplLCB0LT5lbmMsIGRzdF9uZWVkX2NyeXB0byhuKSk7Ci0KLQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pICYmIHQtPmVuYykKLQkJZHN0X3RyYW5zX2NyeXB0byh0KTsKLQllbHNlCi0JCWRzdF90cmFuc19zZW5kKHQpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQlkc3Rfbm9kZV9wdXQobik7Ci0JbWVtcG9vbF9mcmVlKHQsIG4tPnRyYW5zX3Bvb2wpOwotZXJyX291dF9leGl0OgotCWJpb19lbmRpbyhiaW8sIGVycik7Ci0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTY2FuIGZvciB0aW1lb3V0L3N0YWxlIHRyYW5zYWN0aW9ucy4KLSAqIEVhY2ggdHJhbnNhY3Rpb24gaXMgYmVpbmcgcmVzZW50IG11bHRpcGxlIHRpbWVzIGJlZm9yZSBlcnJvciBjb21wbGV0aW9uLgotICovCi1zdGF0aWMgdm9pZCBkc3RfdHJhbnNfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkc3Rfbm9kZSwKLQkJCXRyYW5zX3dvcmsud29yayk7Ci0Jc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBuLT50cmFuc19zY2FuX3RpbWVvdXQ7Ci0JaW50IG51bSA9IDEwICogbi0+dHJhbnNfbWF4X3JldHJpZXM7Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCWZvciAocmJfbm9kZSA9IHJiX2ZpcnN0KCZuLT50cmFuc19yb290KTsgcmJfbm9kZTsgKSB7Ci0JCXQgPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJaWYgKHRpbWVvdXQgJiYgdGltZV9hZnRlcih0LT5zZW5kX3RpbWUgKyB0aW1lb3V0LCBqaWZmaWVzKQotCQkJCSYmIHQtPnJldHJpZXMgPT0gMCkKLQkJCWJyZWFrOwotI2lmIDAKLQkJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICVsbHUsIG46ICVzLCByZXRyaWVzOiAldSwgbWF4OiAldS5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBuLT5uYW1lLAotCQkJdC0+cmV0cmllcywgbi0+dHJhbnNfbWF4X3JldHJpZXMpOwotI2VuZGlmCi0JCWlmICgtLW51bSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZHN0X3RyYW5zX2dldCh0KTsKLQotCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKLQotCQlpZiAodGltZW91dCAmJiAoKyt0LT5yZXRyaWVzIDwgbi0+dHJhbnNfbWF4X3JldHJpZXMpKSB7Ci0JCQlkc3RfdHJhbnNfc2VuZCh0KTsKLQkJfSBlbHNlIHsKLQkJCXQtPmVycm9yID0gLUVUSU1FRE9VVDsKLQkJCWRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOwotCQkJZHN0X3RyYW5zX3B1dCh0KTsKLQkJfQotCi0JCWRzdF90cmFuc19wdXQodCk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCS8qCi0JICogSWYgbm8gdGltZW91dCBzcGVjaWZpZWQgdGhlbiBzeXN0ZW0gaXMgaW4gdGhlIG1pZGRsZSBvZiBleGl0aW5nCi0JICogcHJvY2Vzcywgc28gbm8gbmVlZCB0byByZXNjaGVkdWxlIHNjYW5uaW5nIHByb2Nlc3MgYWdhaW4uCi0JICovCi0JaWYgKHRpbWVvdXQpIHsKLQkJaWYgKCFudW0pCi0JCQl0aW1lb3V0ID0gSFo7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbi0+dHJhbnNfd29yaywgdGltZW91dCk7Ci0JfQotfQotCi0vKgotICogRmx1c2ggYWxsIHRyYW5zYWN0aW9ucyBhbmQgbWFyayB0aGVtIGFzIHRpbWVkIG91dC4KLSAqIERlc3Ryb3kgdHJhbnNhY3Rpb24gcG9vbHMuCi0gKi8KLXZvaWQgZHN0X25vZGVfdHJhbnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKLQotCWlmICghbi0+dHJhbnNfY2FjaGUpCi0JCXJldHVybjsKLQotCWRwcmludGsoIiVzOiBuOiAlcCwgY2FuY2VsbGluZyB0aGUgd29yay5cbiIsIF9fZnVuY19fLCBuKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm4tPnRyYW5zX3dvcmspOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JZHByaW50aygiJXM6IG46ICVwLCB3b3JrIGhhcyBiZWVuIGNhbmNlbGxlZC5cbiIsIF9fZnVuY19fLCBuKTsKLQotCWZvciAocmJfbm9kZSA9IHJiX2ZpcnN0KCZuLT50cmFuc19yb290KTsgcmJfbm9kZTsgKSB7Ci0JCXQgPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICVsbHUsIG46ICVzLlxuIiwKLQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIG4tPm5hbWUpOwotCi0JCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOwotCi0JCXQtPmVycm9yID0gLUVUSU1FRE9VVDsKLQkJZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7Ci0JCWRzdF90cmFuc19wdXQodCk7Ci0JfQotCi0JbWVtcG9vbF9kZXN0cm95KG4tPnRyYW5zX3Bvb2wpOwotCWttZW1fY2FjaGVfZGVzdHJveShuLT50cmFuc19jYWNoZSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRyYW5zYWN0aW9uIHN0b3JhZ2UgZm9yIGdpdmVuIG5vZGUuCi0gKiBUcmFuc2FjdGlvbiBzdG9yZXMgbm90IG9ubHkgY29udHJvbCBpbmZvcm1hdGlvbiwKLSAqIGJ1dCBhbHNvIG5ldHdvcmsgY29tbWFuZCBhbmQgY3J5cHRvIGRhdGEgKGlmIG5lZWRlZCkKLSAqIHRvIHJlZHVjZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMuIFRodXMgdHJhbnNhY3Rpb24gc2l6ZQotICogZGlmZmVycyBmcm9tIG5vZGUgdG8gbm9kZS4KLSAqLwotaW50IGRzdF9ub2RlX3RyYW5zX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQkvKgotCSAqIFdlIG5lZWQgdGhpcywgc2luY2Ugbm9kZSB3aXRoIGdpdmVuIG5hbWUgY2FuIGJlIGRyb3BwZWQgZnJvbSB0aGUKLQkgKiBoYXNoIHRhYmxlLCBidXQgYmUgc3RpbGwgYWxpdmUsIHNvIHN1YnNlcXVlbnQgY3JlYXRpb24gb2YgdGhlIG5vZGUKLQkgKiB3aXRoIHRoZSBzYW1lIG5hbWUgbWF5IGNvbGxpZGUgd2l0aCBleGlzdGluZyBjYWNoZSBuYW1lLgotCSAqLwotCi0Jc25wcmludGYobi0+Y2FjaGVfbmFtZSwgc2l6ZW9mKG4tPmNhY2hlX25hbWUpLCAiJXMtJXAiLCBuLT5uYW1lLCBuKTsKLQotCW4tPnRyYW5zX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUobi0+Y2FjaGVfbmFtZSwKLQkJCXNpemUgKyBuLT5jcnlwdG8uY3J5cHRvX2F0dGFjaGVkX3NpemUsCi0JCQkwLCAwLCBOVUxMKTsKLQlpZiAoIW4tPnRyYW5zX2NhY2hlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCW4tPnRyYW5zX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woZHN0X21lbXBvb2xfbnVtLAotCQkJbi0+dHJhbnNfY2FjaGUpOwotCWlmICghbi0+dHJhbnNfcG9vbCkKLQkJZ290byBlcnJfb3V0X2NhY2hlX2Rlc3Ryb3k7Ci0KLQltdXRleF9pbml0KCZuLT50cmFuc19sb2NrKTsKLQluLT50cmFuc19yb290ID0gUkJfUk9PVDsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZuLT50cmFuc193b3JrLCBkc3RfdHJhbnNfc2Nhbik7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCBuLT50cmFuc19zY2FuX3RpbWVvdXQpOwotCi0JZHByaW50aygiJXM6IG46ICVwLCBzaXplOiAldSwgY3J5cHRvOiAldS5cbiIsCi0JCV9fZnVuY19fLCBuLCBzaXplLCBuLT5jcnlwdG8uY3J5cHRvX2F0dGFjaGVkX3NpemUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfY2FjaGVfZGVzdHJveToKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOwotZXJyX291dF9leGl0OgotCXJldHVybiAtRU5PTUVNOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwppbmRleCAzYWJlN2M5Li4zZGVmYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwpAQCAtNDcsNyArNDcsNyBAQAogY29uZmlnIFBBTkVMX0tFWVBBRAogCWRlcGVuZHMgb24gUEFORUwgJiYgUEFORUxfUFJPRklMRT0iMCIKIAlpbnQgIktleXBhZCB0eXBlICgwPW5vbmUsIDE9b2xkIDYga2V5cywgMj1uZXcgNiBrZXlzLCAzPU5leGNvbSA0IGtleXMpIgotCXJhbmdlIDAgNAorCXJhbmdlIDAgMwogCWRlZmF1bHQgMAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBhIGtleXBhZCBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGY5OGE1MjQuLjk1YzkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogI2lmZGVmIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI3VuZGVmIERFRkFVTFRfTENEX0NIQVJTRVQKLSNkZWZpbmUgREVGQVVMVF9MQ0RfQ0hBUlNFVAorI2RlZmluZSBERUZBVUxUX0xDRF9DSEFSU0VUIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI2VuZGlmCiAKICNlbmRpZiAvKiBERUZBVUxUX1BST0ZJTEUgPT0gMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCmluZGV4IDZjNWIyNjEuLmFhY2QyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKQEAgLTcyMiw4ICs3MjIsNiBAQAogCQlpZiAoaW5vZGUtPmlfbmxpbmspCiAJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJfQotCWRwcmludGsoIiVzOiBpbm9kZTogJXAsIGxvY2s6ICVsZCwgdW5oYXNoZWQ6ICVkLlxuIiwKLQkJX19mdW5jX18sIHBpLCBpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSywgaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCmluZGV4IGJhYzQwZDYuLjhkNjRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCkBAIC0xLDYgKzEsNSBAQAogVE9ETzoKIAktIEFkZCBzdXBwb3J0IGZvciBzd2FwIG5vdGlmaWVycwotCS0gUmVtb3ZlIENPTkZJR19BUk0gaGFjawogCiBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+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+Y2FyZCk7CisJZ2F1ZGlvX2NsZWFudXAoKTsKIHNldHVwX2ZhaWw6CiAJa2ZyZWUoYXVkaW8pOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYwppbmRleCA4MjUyNTk1ZC4uMzVlMDkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBnYXVkaW8gKnRoZV9jYXJkOwogLyoqCiAgKiBnYXVkaW9fc2V0dXAgLSBzZXR1cCBBTFNBIGludGVyZmFjZSBhbmQgcHJlcGFyaW5nIGZvciBVU0IgdHJhbnNmZXIKICAqCkBAIC0zMDMsNiArMzA0LDkgQEAKIAlpZiAocmV0KQogCQlFUlJPUihjYXJkLCAid2UgbmVlZCBhdCBsZWFzdCBvbmUgY29udHJvbCBkZXZpY2VcbiIpOwogCisJaWYgKCF0aGVfY2FyZCkKKwkJdGhlX2NhcmQgPSBjYXJkOworCiAJcmV0dXJuIHJldDsKIAogfQpAQCAtMzEyLDkgKzMxNiwxMSBAQAogICoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIGZyZWUgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGdhdWRpb19zZXR1cCgpLgogICovCi12b2lkIGdhdWRpb19jbGVhbnVwKHN0cnVjdCBnYXVkaW8gKmNhcmQpCit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKGNhcmQpCi0JCWdhdWRpb19jbG9zZV9zbmRfZGV2KGNhcmQpOworCWlmICh0aGVfY2FyZCkgeworCQlnYXVkaW9fY2xvc2Vfc25kX2Rldih0aGVfY2FyZCk7CisJCXRoZV9jYXJkID0gTlVMTDsKKwl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oCmluZGV4IGNjOGQxNTkuLjA4ZmZjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uaApAQCAtNTEsNiArNTEsNiBAQAogfTsKIAogaW50IGdhdWRpb19zZXR1cChzdHJ1Y3QgZ2F1ZGlvICpjYXJkKTsKLXZvaWQgZ2F1ZGlvX2NsZWFudXAoc3RydWN0IGdhdWRpbyAqY2FyZCk7Cit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19VX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKaW5kZXggMDBhMjk4NS4uZmY0Mzc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAlwa3QtPmluZm8gPSAwOwogCXBrdC0+cHJpdl9kYXRhID0gTlVMTDsKIAotCWNxX3B1dCh1c2ItPmVwMC0+ZW1wdHlfZnJhbWVfUSwgcGt0KTsKKwljcV9wdXQoJnVzYi0+ZXAwLT5lbXB0eV9mcmFtZV9RLCBwa3QpOwogfQogCiAvKiBjb25maXJtIHN1Ym1pdHRlZCBwYWNrZXQgKi8KQEAgLTU3LDcgKzU3LDcgQEAKIAkJaWYgKCh0ZC0+ZGF0YSArIHRkLT5hY3R1YWxfbGVuKSAmJiB0cmFuc19sZW4pCiAJCQltZW1jcHkodGQtPmRhdGEgKyB0ZC0+YWN0dWFsX2xlbiwgcGt0LT5kYXRhLAogCQkJICAgICAgIHRyYW5zX2xlbik7Ci0JCWNxX3B1dCh1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RLCBwa3QtPmRhdGEpOworCQljcV9wdXQoJnVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CiAJfQogCiAJcmVjeWNsZV9mcmFtZSh1c2IsIHBrdCk7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAl9CiAKIAkvKiB1cGRhdGUgZnJhbWUgb2JqZWN0IGZpZWxkcyBiZWZvcmUgdHJhbnNtaXR0aW5nICovCi0JcGt0ID0gY3FfZ2V0KHVzYi0+ZXAwLT5lbXB0eV9mcmFtZV9RKTsKKwlwa3QgPSBjcV9nZXQoJnVzYi0+ZXAwLT5lbXB0eV9mcmFtZV9RKTsKIAlpZiAoIXBrdCkgewogCQlmaGNpX2RiZyh1c2ItPmZoY2ksICJ0aGVyZSBpcyBubyBlbXB0eSBmcmFtZVxuIik7CiAJCXJldHVybiAtMTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAJcGt0LT5pbmZvID0gMDsKIAlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCWRhdGEgPSBjcV9nZXQodXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSk7CisJCWRhdGEgPSBjcV9nZXQoJnVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EpOwogCQlCVUdfT04oIWRhdGEpOwogCQlwa3QtPmluZm8gPSBQS1RfRFVNTVlfUEFDS0VUOwogCX0KQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlsaXN0X2RlbF9pbml0KCZ0ZC0+ZnJhbWVfbGgpOwogCQl0ZC0+c3RhdHVzID0gVVNCX1REX09LOwogCQlpZiAocGt0LT5pbmZvICYgUEtUX0RVTU1ZX1BBQ0tFVCkKLQkJCWNxX3B1dCh1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RLCBwa3QtPmRhdGEpOworCQkJY3FfcHV0KCZ1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RLCBwa3QtPmRhdGEpOwogCQlyZWN5Y2xlX2ZyYW1lKHVzYiwgcGt0KTsKIAkJdXNiLT5hY3R1YWxfZnJhbWUtPnRvdGFsX2J5dGVzIC09IChsZW4gKyBQUk9UT0NPTF9PVkVSSEVBRCk7CiAJCWZoY2lfZXJyKHVzYi0+ZmhjaSwgImhvc3QgdHJhbnNhY3Rpb24gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYwppbmRleCBiNDAzMzIyLi5kMjI0YWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCkBAIC0xMDYsMzMgKzEwNiwzMyBAQAogCQkJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+dGRfYmFzZSkpOwogCiAJCWlmIChlcC0+Y29uZl9mcmFtZV9RKSB7Ci0JCQlzaXplID0gY3FfaG93bWFueShlcC0+Y29uZl9mcmFtZV9RKTsKKwkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+Y29uZl9mcmFtZV9RKTsKIAkJCWZvciAoOyBzaXplOyBzaXplLS0pIHsKLQkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoZXAtPmNvbmZfZnJhbWVfUSk7CisJCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KCZlcC0+Y29uZl9mcmFtZV9RKTsKIAogCQkJCWtmcmVlKHBrdCk7CiAJCQl9Ci0JCQljcV9kZWxldGUoZXAtPmNvbmZfZnJhbWVfUSk7CisJCQljcV9kZWxldGUoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQl9CiAKIAkJaWYgKGVwLT5lbXB0eV9mcmFtZV9RKSB7Ci0JCQlzaXplID0gY3FfaG93bWFueShlcC0+ZW1wdHlfZnJhbWVfUSk7CisJCQlzaXplID0gY3FfaG93bWFueSgmZXAtPmVtcHR5X2ZyYW1lX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewotCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldChlcC0+ZW1wdHlfZnJhbWVfUSk7CisJCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAKIAkJCQlrZnJlZShwa3QpOwogCQkJfQotCQkJY3FfZGVsZXRlKGVwLT5lbXB0eV9mcmFtZV9RKTsKKwkJCWNxX2RlbGV0ZSgmZXAtPmVtcHR5X2ZyYW1lX1EpOwogCQl9CiAKIAkJaWYgKGVwLT5kdW1teV9wYWNrZXRzX1EpIHsKLQkJCXNpemUgPSBjcV9ob3dtYW55KGVwLT5kdW1teV9wYWNrZXRzX1EpOworCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewotCQkJCXU4ICpidWZmID0gY3FfZ2V0KGVwLT5kdW1teV9wYWNrZXRzX1EpOworCQkJCXU4ICpidWZmID0gY3FfZ2V0KCZlcC0+ZHVtbXlfcGFja2V0c19RKTsKIAogCQkJCWtmcmVlKGJ1ZmYpOwogCQkJfQotCQkJY3FfZGVsZXRlKGVwLT5kdW1teV9wYWNrZXRzX1EpOworCQkJY3FfZGVsZXRlKCZlcC0+ZHVtbXlfcGFja2V0c19RKTsKIAkJfQogCiAJCWtmcmVlKGVwKTsKQEAgLTE3NSwxMCArMTc1LDkgQEAKIAllcC0+dGRfYmFzZSA9IGNwbV9tdXJhbV9hZGRyKGVwX29mZnNldCk7CiAKIAkvKiB6ZXJvIGFsbCBxdWV1ZSBwb2ludGVycyAqLwotCWVwLT5jb25mX2ZyYW1lX1EgPSBjcV9uZXcocmluZ19sZW4gKyAyKTsKLQllcC0+ZW1wdHlfZnJhbWVfUSA9IGNxX25ldyhyaW5nX2xlbiArIDIpOwotCWVwLT5kdW1teV9wYWNrZXRzX1EgPSBjcV9uZXcocmluZ19sZW4gKyAyKTsKLQlpZiAoIWVwLT5jb25mX2ZyYW1lX1EgfHwgIWVwLT5lbXB0eV9mcmFtZV9RIHx8ICFlcC0+ZHVtbXlfcGFja2V0c19RKSB7CisJaWYgKGNxX25ldygmZXAtPmNvbmZfZnJhbWVfUSwgcmluZ19sZW4gKyAyKSB8fAorCSAgICBjcV9uZXcoJmVwLT5lbXB0eV9mcmFtZV9RLCByaW5nX2xlbiArIDIpIHx8CisJICAgIGNxX25ldygmZXAtPmR1bW15X3BhY2tldHNfUSwgcmluZ19sZW4gKyAyKSkgewogCQllcnJfZm9yID0gImZyYW1lX3F1ZXVlcyI7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTE5OSw4ICsxOTgsOCBAQAogCQkJZXJyX2ZvciA9ICJidWZmZXIiOwogCQkJZ290byBlcnI7CiAJCX0KLQkJY3FfcHV0KGVwLT5lbXB0eV9mcmFtZV9RLCBwa3QpOwotCQljcV9wdXQoZXAtPmR1bW15X3BhY2tldHNfUSwgYnVmZik7CisJCWNxX3B1dCgmZXAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7CisJCWNxX3B1dCgmZXAtPmR1bW15X3BhY2tldHNfUSwgYnVmZik7CiAJfQogCiAJLyogd2UgcHV0IHRoZSBlbmRwb2ludCBwYXJhbWV0ZXIgUkFNIHJpZ2h0IGJlaGluZCB0aGUgVEQgcmluZyAqLwpAQCAtMzE5LDcgKzMxOCw3IEBACiAJCWlmICgoYnVmID09IERVTU1ZMl9CRF9CVUZGRVIpICYmICEodGRfc3RhdHVzICYgflREX1cpKQogCQkJY29udGludWU7CiAKLQkJcGt0ID0gY3FfZ2V0KGVwLT5jb25mX2ZyYW1lX1EpOworCQlwa3QgPSBjcV9nZXQoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQlpZiAoIXBrdCkKIAkJCWZoY2lfZXJyKHVzYi0+ZmhjaSwgIm5vIGZyYW1lIHRvIGNvbmZpcm1cbiIpOwogCkBAIC00NjAsOSArNDU5LDkgQEAKIAkJb3V0X2JlMTYoJnRkLT5sZW5ndGgsIHBrdC0+bGVuKTsKIAogCS8qIHB1dCB0aGUgZnJhbWUgdG8gdGhlIGNvbmZpcm1hdGlvbiBxdWV1ZSAqLwotCWNxX3B1dChlcC0+Y29uZl9mcmFtZV9RLCBwa3QpOworCWNxX3B1dCgmZXAtPmNvbmZfZnJhbWVfUSwgcGt0KTsKIAotCWlmIChjcV9ob3dtYW55KGVwLT5jb25mX2ZyYW1lX1EpID09IDEpCisJaWYgKGNxX2hvd21hbnkoJmVwLT5jb25mX2ZyYW1lX1EpID09IDEpCiAJCW91dF84KCZ1c2ItPmZoY2ktPnJlZ3MtPnVzYl9jb21tLCBVU0JfQ01EX1NUUl9GSUZPKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaAppbmRleCA3MTE2Mjg0Li43MmRhZTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaApAQCAtNDIzLDkgKzQyMyw5IEBACiAJc3RydWN0IHVzYl90ZCBfX2lvbWVtICp0ZF9iYXNlOyAvKiBmaXJzdCBURCBpbiB0aGUgcmluZyAqLwogCXN0cnVjdCB1c2JfdGQgX19pb21lbSAqY29uZl90ZDsgLyogbmV4dCBURCBmb3IgY29uZmlybSBhZnRlciB0cmFuc2FjICovCiAJc3RydWN0IHVzYl90ZCBfX2lvbWVtICplbXB0eV90ZDsvKiBuZXh0IFREIGZvciBuZXcgdHJhbnNhY3Rpb24gcmVxLiAqLwotCXN0cnVjdCBrZmlmbyAqZW1wdHlfZnJhbWVfUTsgIC8qIEVtcHR5IGZyYW1lcyBsaXN0IHRvIHVzZSAqLwotCXN0cnVjdCBrZmlmbyAqY29uZl9mcmFtZV9ROyAgIC8qIGZyYW1lcyBwYXNzZWQgdG8gVERzLHdhaXRpbmcgZm9yIHR4ICovCi0Jc3RydWN0IGtmaWZvICpkdW1teV9wYWNrZXRzX1E7LyogZHVtbXkgcGFja2V0cyBmb3IgdGhlIENSQyBvdmVydW4gKi8KKwlzdHJ1Y3Qga2ZpZm8gZW1wdHlfZnJhbWVfUTsgIC8qIEVtcHR5IGZyYW1lcyBsaXN0IHRvIHVzZSAqLworCXN0cnVjdCBrZmlmbyBjb25mX2ZyYW1lX1E7ICAgLyogZnJhbWVzIHBhc3NlZCB0byBURHMsd2FpdGluZyBmb3IgdHggKi8KKwlzdHJ1Y3Qga2ZpZm8gZHVtbXlfcGFja2V0c19ROy8qIGR1bW15IHBhY2tldHMgZm9yIHRoZSBDUkMgb3ZlcnVuICovCiAKIAlib29sIGFscmVhZHlfcHVzaGVkX2R1bW15X2JkOwogfTsKQEAgLTQ5Myw5ICs0OTMsOSBAQAogfQogCiAvKiBmaWZvIG9mIHBvaW50ZXJzICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBrZmlmbyAqY3FfbmV3KGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgY3FfbmV3KHN0cnVjdCBrZmlmbyAqZmlmbywgaW50IHNpemUpCiB7Ci0JcmV0dXJuIGtmaWZvX2FsbG9jKHNpemUgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCwgTlVMTCk7CisJcmV0dXJuIGtmaWZvX2FsbG9jKGZpZm8sIHNpemUgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcV9kZWxldGUoc3RydWN0IGtmaWZvICprZmlmbykKQEAgLTUwNSwxOSArNTA1LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNxX2hvd21hbnkoc3RydWN0IGtmaWZvICprZmlmbykKIHsKLQlyZXR1cm4gX19rZmlmb19sZW4oa2ZpZm8pIC8gc2l6ZW9mKHZvaWQgKik7CisJcmV0dXJuIGtmaWZvX2xlbihrZmlmbykgLyBzaXplb2Yodm9pZCAqKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY3FfcHV0KHN0cnVjdCBrZmlmbyAqa2ZpZm8sIHZvaWQgKnApCiB7Ci0JcmV0dXJuIF9fa2ZpZm9fcHV0KGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOworCXJldHVybiBrZmlmb19pbihrZmlmbywgKHZvaWQgKikmcCwgc2l6ZW9mKHApKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICpjcV9nZXQoc3RydWN0IGtmaWZvICprZmlmbykKIHsKIAl2b2lkICpwID0gTlVMTDsKIAotCV9fa2ZpZm9fZ2V0KGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOworCWtmaWZvX291dChrZmlmbywgKHZvaWQgKikmcCwgc2l6ZW9mKHApKTsKIAlyZXR1cm4gcDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKaW5kZXggMWQ4ZTM5YS4uMWViOWU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCkBAIC02MCw2ICs2MCw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXBwbGVkaXNwbGF5X3RhYmxlIFtdID0gewogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMTgpIH0sCiAJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxOSkgfSwKKwl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjFjKSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMWQpIH0sCiAKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtNzIsOCArNzMsOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvKiB1c2IgZGV2aWNlICovCiAJc3RydWN0IHVyYiAqdXJiOwkJLyogdXNiIHJlcXVlc3QgYmxvY2sgKi8KIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7CS8qIGJhY2tsaWdodCBkZXZpY2UgKi8KLQljaGFyICp1cmJkYXRhOwkJCS8qIGludGVycnVwdCBVUkIgZGF0YSBidWZmZXIgKi8KLQljaGFyICptc2dkYXRhOwkJCS8qIGNvbnRyb2wgbWVzc2FnZSBkYXRhIGJ1ZmZlciAqLworCXU4ICp1cmJkYXRhOwkJCS8qIGludGVycnVwdCBVUkIgZGF0YSBidWZmZXIgKi8KKwl1OCAqbXNnZGF0YTsJCQkvKiBjb250cm9sIG1lc3NhZ2UgZGF0YSBidWZmZXIgKi8KIAogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlpbnQgYnV0dG9uX3ByZXNzZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggNjAyZWUwNS4uNTk4NjBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fZnVuY19fLCBlcnIpOwogCQkJZ290byB3cmFwZXJyOwogCQl9Ci0JfSB3aGlsZSAoaSA+IDApOworCX0gd2hpbGUgKHJlYyk7CiAKIAkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLwogCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggZmU0OTM0ZC4uYWQyNmU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtMjksNiArMjksOCBAQAogewogCXZvaWQgX19pb21lbSAqZmlmbyA9IGh3X2VwLT5maWZvOwogCXZvaWQgX19pb21lbSAqZXBpbyA9IGh3X2VwLT5yZWdzOworCXU4IGVwbnVtID0gaHdfZXAtPmVwbnVtOworCXUxNiBkbWFfcmVnID0gMDsKIAogCXByZWZldGNoKCh1OCAqKXNyYyk7CiAKQEAgLTM5LDY3ICs0MSwxMTMgQEAKIAogCWR1bXBfZmlmb19kYXRhKHNyYywgbGVuKTsKIAotCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylzcmMgJiAweDAxKSkKLQkJb3V0c3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBzcmMsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0JZWxzZQotCQlvdXRzdygodW5zaWduZWQgbG9uZylmaWZvLCBzcmMsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci19CisJaWYgKCFBTk9NQUxZXzA1MDAwMzgwICYmIGVwbnVtICE9IDApIHsKKwkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpc3JjLAorCQkJKHVuc2lnbmVkIGludCkoc3JjICsgbGVuKSk7CiAKKwkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBzcmMgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CisKKwkJZG1hX3JlZyA9ICh1MTYpICgoKHUzMikgc3JjID4+IDE2KSAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CisKKwkJLyogU2V0dXAgRE1BIGNvdW50IHJlZ2lzdGVyICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfTE9XKSwgbGVuKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9ISUdIKSwgMCk7CisJCVNTWU5DKCk7CisKKwkJLyogRW5hYmxlIHRoZSBETUEgKi8KKwkJZG1hX3JlZyA9IChlcG51bSA8PCA0KSB8IERNQV9FTkEgfCBJTlRfRU5BIHwgRElSRUNUSU9OOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKKworCQkvKiBXYWl0IGZvciBjb21wZWxldGUgKi8KKwkJd2hpbGUgKCEoYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkgJiAoMSA8PCBlcG51bSkpKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJLyogYWNrbm93bGVkZ2UgZG1hIGludGVycnVwdCAqLworCQliZmluX3dyaXRlX1VTQl9ETUFfSU5URVJSVVBUKDEgPDwgZXBudW0pOworCQlTU1lOQygpOworCisJCS8qIFJlc2V0IERNQSAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCAwKTsKKwkJU1NZTkMoKTsKKwl9IGVsc2UgeworCQlTU1lOQygpOworCisJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylzcmMgJiAweDAxKSkKKwkJCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAorCQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKKwkJZWxzZQorCQkJb3V0c3coKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAorCQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKKworCX0KK30KIC8qCiAgKiBVbmxvYWQgYW4gZW5kcG9pbnQncyBGSUZPCiAgKi8KIHZvaWQgbXVzYl9yZWFkX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgbGVuLCB1OCAqZHN0KQogewogCXZvaWQgX19pb21lbSAqZmlmbyA9IGh3X2VwLT5maWZvOwotCi0jaWZkZWYgQ09ORklHX0JGNTJ4CiAJdTggZXBudW0gPSBod19lcC0+ZXBudW07CiAJdTE2IGRtYV9yZWcgPSAwOwogCi0JaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClkc3QsCi0JCSh1bnNpZ25lZCBpbnQpKGRzdCArIGxlbikpOworCWlmIChBTk9NQUxZXzA1MDAwNDY3ICYmIGVwbnVtICE9IDApIHsKIAotCS8qIFNldHVwIERNQSBhZGRyZXNzIHJlZ2lzdGVyICovCi0JZG1hX3JlZyA9ICh1MTYpICgodTMyKSBkc3QgJiAweEZGRkYpOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9MT1cpLCBkbWFfcmVnKTsKLQlTU1lOQygpOworCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KWRzdCwKKwkJCSh1bnNpZ25lZCBpbnQpKGRzdCArIGxlbikpOwogCi0JZG1hX3JlZyA9ICh1MTYpICgoKHUzMikgZHN0ID4+IDE2KSAmIDB4RkZGRik7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0hJR0gpLCBkbWFfcmVnKTsKLQlTU1lOQygpOworCQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLworCQlkbWFfcmVnID0gKHUxNikgKCh1MzIpIGRzdCAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9MT1cpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKIAotCS8qIFNldHVwIERNQSBjb3VudCByZWdpc3RlciAqLwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfTE9XKSwgbGVuKTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0hJR0gpLCAwKTsKLQlTU1lOQygpOworCQlkbWFfcmVnID0gKHUxNikgKCgodTMyKSBkc3QgPj4gMTYpICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0hJR0gpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKIAotCS8qIEVuYWJsZSB0aGUgRE1BICovCi0JZG1hX3JlZyA9IChlcG51bSA8PCA0KSB8IERNQV9FTkEgfCBJTlRfRU5BOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIGRtYV9yZWcpOwotCVNTWU5DKCk7CisJCS8qIFNldHVwIERNQSBjb3VudCByZWdpc3RlciAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfSElHSCksIDApOworCQlTU1lOQygpOwogCi0JLyogV2FpdCBmb3IgY29tcGVsZXRlICovCi0Jd2hpbGUgKCEoYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkgJiAoMSA8PCBlcG51bSkpKQotCQljcHVfcmVsYXgoKTsKKwkJLyogRW5hYmxlIHRoZSBETUEgKi8KKwkJZG1hX3JlZyA9IChlcG51bSA8PCA0KSB8IERNQV9FTkEgfCBJTlRfRU5BOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKIAotCS8qIGFja25vd2xlZGdlIGRtYSBpbnRlcnJ1cHQgKi8KLQliZmluX3dyaXRlX1VTQl9ETUFfSU5URVJSVVBUKDEgPDwgZXBudW0pOwotCVNTWU5DKCk7CisJCS8qIFdhaXQgZm9yIGNvbXBlbGV0ZSAqLworCQl3aGlsZSAoIShiZmluX3JlYWRfVVNCX0RNQV9JTlRFUlJVUFQoKSAmICgxIDw8IGVwbnVtKSkpCisJCQljcHVfcmVsYXgoKTsKIAotCS8qIFJlc2V0IERNQSAqLwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIDApOwotCVNTWU5DKCk7Ci0jZWxzZQotCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylkc3QgJiAweDAxKSkKLQkJaW5zd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLQllbHNlCi0JCWluc3coKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotI2VuZGlmCisJCS8qIGFja25vd2xlZGdlIGRtYSBpbnRlcnJ1cHQgKi8KKwkJYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKKwkJU1NZTkMoKTsKIAorCQkvKiBSZXNldCBETUEgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgMCk7CisJCVNTWU5DKCk7CisJfSBlbHNlIHsKKwkJU1NZTkMoKTsKKwkJLyogUmVhZCB0aGUgbGFzdCBieXRlIG9mIHBhY2tldCB3aXRoIG9kZCBzaXplIGZyb20gYWRkcmVzcyBmaWZvICsgNAorCQkgKiB0byB0cmlnZ2VyIDEgYnl0ZSBhY2Nlc3MgdG8gRVAwIEZJRk8uCisJCSAqLworCQlpZiAobGVuID09IDEpCisJCQkqZHN0ID0gKHU4KWludygodW5zaWduZWQgbG9uZylmaWZvICsgNCk7CisJCWVsc2UgeworCQkJaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKWRzdCAmIDB4MDEpKQorCQkJCWluc3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsIGxlbiA+PiAxKTsKKwkJCWVsc2UKKwkJCQlpbnN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwgbGVuID4+IDEpOworCisJCQlpZiAobGVuICYgMHgwMSkKKwkJCQkqKGRzdCArIGxlbiAtIDEpID0gKHU4KWludygodW5zaWduZWQgbG9uZylmaWZvICsgNCk7CisJCX0KKwl9CiAJREJHKDQsICIlY1ggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcFxuIiwKIAkJCSdSJywgaHdfZXAtPmVwbnVtLCBmaWZvLCBsZW4sIGRzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaCBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaAppbmRleCAxMGI3ZDc1Li5iZDkzNTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oCkBAIC02OSw3ICs2OSw2IEBACiAjZGVmaW5lIGR1bXBfZmlmb19kYXRhKGJ1ZiwgbGVuKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0JGNTJ4CiAKICNkZWZpbmUgVVNCX0RNQV9CQVNFCQlVU0JfRE1BX0lOVEVSUlVQVAogI2RlZmluZSBVU0JfRE1BeF9DVFJMCQkweDA0CkBAIC03OSw3ICs3OCw2IEBACiAjZGVmaW5lIFVTQl9ETUF4X0NPVU5UX0hJR0gJMHgxNAogCiAjZGVmaW5lIFVTQl9ETUFfUkVHKGVwLCByZWcpCShVU0JfRE1BX0JBU0UgKyAweDIwICogZXAgKyByZWcpCi0jZW5kaWYKIAogLyogQWxtb3N0IDEgc2Vjb25kICovCiAjZGVmaW5lIFRJTUVSX0RFTEFZCSgxICogSFopCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggZWYyMzMyYS4uYTQ0YTQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtMTE1NCw4ICsxMTU0LDExIEBACiAJc3RydWN0IG11c2JfaHdfZXAJKmh3X2VwID0gTlVMTDsKIAl1MzIJCQlyeCwgdHg7CiAJaW50CQkJaSwgaW5kZXg7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAljcHBpID0gY29udGFpbmVyX29mKG11c2ItPmRtYV9jb250cm9sbGVyLCBzdHJ1Y3QgY3BwaSwgY29udHJvbGxlcik7CisJaWYgKGNwcGktPmlycSkKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAogCXRpYmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIApAQCAtMTI4NSw2ICsxMjg4LDkgQEAKIAkvKiB3cml0ZSB0byBDUFBJIEVPSSByZWdpc3RlciB0byByZS1lbmFibGUgaW50ZXJydXB0cyAqLwogCW11c2Jfd3JpdGVsKHRpYmFzZSwgREFWSU5DSV9DUFBJX0VPSV9SRUcsIDApOwogCisJaWYgKGNwcGktPmlycSkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCmluZGV4IGUxNmZmNjAuLjY2OTEzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAibXVzYl9jb3JlLmgiCiAKICNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQotI2RlZmluZSBHUElPX25WQlVTX0RSVgkJMTQ0CisjZGVmaW5lIEdQSU9fblZCVVNfRFJWCQkxNjAKICNlbmRpZgogCiAjaW5jbHVkZSAiZGF2aW5jaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYmZlMDhmNC4uNWViOTMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0xMzE5LDcgKzEzMTksNyBAQAogI2VuZGlmCiAJdTggcmVnOwogCWNoYXIgKnR5cGU7Ci0JY2hhciBhSW5mb1s3OF0sIGFSZXZpc2lvblszMl0sIGFEYXRlWzEyXTsKKwljaGFyIGFJbmZvWzkwXSwgYVJldmlzaW9uWzMyXSwgYURhdGVbMTJdOwogCXZvaWQgX19pb21lbQkqbWJhc2UgPSBtdXNiLT5tcmVnczsKIAlpbnQJCXN0YXR1cyA9IDA7CiAJaW50CQlpOwpAQCAtMTUyMSw2ICsxNTIxLDE0IEBACiAJCShkZXZjdGwgJiBNVVNCX0RFVkNUTF9ITSkgPyAiaG9zdCIgOiAicGVyaXBoZXJhbCIsCiAJCW11c2ItPmludF91c2IsIG11c2ItPmludF90eCwgbXVzYi0+aW50X3J4KTsKIAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQworCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSB8fCBpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCisJCWlmICghbXVzYi0+Z2FkZ2V0X2RyaXZlcikgeworCQkJREJHKDUsICJObyBnYWRnZXQgZHJpdmVyIGxvYWRlZFxuIik7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKyNlbmRpZgorCiAJLyogdGhlIGNvcmUgY2FuIGludGVycnVwdCB1cyBmb3IgbXVsdGlwbGUgcmVhc29uczsgZG9jcyBoYXZlCiAJICogYSBnZW5lcmljIGludGVycnVwdCBmbG93Y2hhcnQgdG8gZm9sbG93CiAJICovCkBAIC0yMTM5LDcgKzIxNDcsNyBAQAogCXJldHVybiBtdXNiX2luaXRfY29udHJvbGxlcihkZXYsIGlycSwgYmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG11c2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBtdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAJdm9pZCBfX2lvbWVtCSpjdHJsX2Jhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CkBAIC0yMjMxLDcgKzIyMzksNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wbQkJPSBNVVNCX0RFVl9QTV9PUFMsCiAJfSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG11c2JfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG11c2JfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBtdXNiX3NodXRkb3duLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGM0OWI5YmEuLmNiY2YxNGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAkJCXNpemVfdCByZXF1ZXN0X3NpemU7CiAKIAkJCS8qIHNldHVwIERNQSwgdGhlbiBwcm9ncmFtIGVuZHBvaW50IENTUiAqLwotCQkJcmVxdWVzdF9zaXplID0gbWluKHJlcXVlc3QtPmxlbmd0aCwKKwkJCXJlcXVlc3Rfc2l6ZSA9IG1pbl90KHNpemVfdCwgcmVxdWVzdC0+bGVuZ3RoLAogCQkJCQkJbXVzYl9lcC0+ZG1hLT5tYXhfbGVuKTsKIAkJCWlmIChyZXF1ZXN0X3NpemUgPCBtdXNiX2VwLT5wYWNrZXRfc3opCiAJCQkJbXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUgPSAwOwpAQCAtMzE5LDcgKzMxOSw3IEBACiAJCQl1c2VfZG1hID0gdXNlX2RtYSAmJiBjLT5jaGFubmVsX3Byb2dyYW0oCiAJCQkJCW11c2JfZXAtPmRtYSwgbXVzYl9lcC0+cGFja2V0X3N6LAogCQkJCQltdXNiX2VwLT5kbWEtPmRlc2lyZWRfbW9kZSwKLQkJCQkJcmVxdWVzdC0+ZG1hLCByZXF1ZXN0X3NpemUpOworCQkJCQlyZXF1ZXN0LT5kbWEgKyByZXF1ZXN0LT5hY3R1YWwsIHJlcXVlc3Rfc2l6ZSk7CiAJCQlpZiAodXNlX2RtYSkgewogCQkJCWlmIChtdXNiX2VwLT5kbWEtPmRlc2lyZWRfbW9kZSA9PSAwKSB7CiAJCQkJCS8qCkBAIC01MTUsMTIgKzUxNSwxMiBAQAogCQkJaWYgKGNzciAmIE1VU0JfVFhDU1JfRklGT05PVEVNUFRZKQogCQkJCXJldHVybjsKIAotCQkJaWYgKCFtdXNiX2VwLT5kZXNjKSB7CisJCQlyZXF1ZXN0ID0gbXVzYl9lcC0+ZGVzYyA/IG5leHRfcmVxdWVzdChtdXNiX2VwKSA6IE5VTEw7CisJCQlpZiAoIXJlcXVlc3QpIHsKIAkJCQlEQkcoNCwgIiVzIGlkbGUgbm93XG4iLAogCQkJCQltdXNiX2VwLT5lbmRfcG9pbnQubmFtZSk7CiAJCQkJcmV0dXJuOwotCQkJfSBlbHNlCi0JCQkJcmVxdWVzdCA9IG5leHRfcmVxdWVzdChtdXNiX2VwKTsKKwkJCX0KIAkJfQogCiAJCXR4c3RhdGUobXVzYiwgdG9fbXVzYl9yZXF1ZXN0KHJlcXVlc3QpKTsKQEAgLTc0Niw2ICs3NDYsOCBAQAogCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcG51bSk7CiAKIAlyZXF1ZXN0ID0gbmV4dF9yZXF1ZXN0KG11c2JfZXApOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuOwogCiAJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKIAlkbWEgPSBpc19kbWFfY2FwYWJsZSgpID8gbXVzYl9lcC0+ZG1hIDogTlVMTDsKQEAgLTE3MzEsNiArMTczMyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAkJb3RnX3NldF9wZXJpcGhlcmFsKG11c2ItPnhjZWl2LCAmbXVzYi0+Zyk7CisJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX0lETEU7CiAJCW11c2ItPmlzX2FjdGl2ZSA9IDE7CiAKIAkJLyogRklYTUUgdGhpcyBpZ25vcmVzIHRoZSBzb2Z0Y29ubmVjdCBmbGFnLiAgRHJpdmVycyBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCmluZGV4IDhmYmEzZjEuLjUzZDA2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJCQltdXNiLT5lcDBfc3RhdGUgPSBNVVNCX0VQMF9TVEFHRV9TVEFUVVNJTjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJRVJSKCJTZXR1cEVuZCBjYW1lIGluIGEgd3JvbmcgZXAwc3RhZ2UgJXMiLAorCQkJRVJSKCJTZXR1cEVuZCBjYW1lIGluIGEgd3JvbmcgZXAwc3RhZ2UgJXNcbiIsCiAJCQkgICAgZGVjb2RlX2VwMHN0YWdlKG11c2ItPmVwMF9zdGF0ZSkpOwogCQl9CiAJCWNzciA9IG11c2JfcmVhZHcocmVncywgTVVTQl9DU1IwKTsKQEAgLTc4NywxMiArNzg3LDE4IEBACiAJCQkJaGFuZGxlZCA9IHNlcnZpY2VfemVyb19kYXRhX3JlcXVlc3QoCiAJCQkJCQltdXNiLCAmc2V0dXApOwogCisJCQkJLyoKKwkJCQkgKiBXZSdyZSBleHBlY3Rpbmcgbm8gZGF0YSBpbiBhbnkgY2FzZSwgc28KKwkJCQkgKiBhbHdheXMgc2V0IHRoZSBEQVRBRU5EIGJpdCAtLSBkb2luZyB0aGlzCisJCQkJICogaGVyZSBoZWxwcyBhdm9pZCBTZXR1cEVuZCBpbnRlcnJ1cHQgY29taW5nCisJCQkJICogaW4gdGhlIGlkbGUgc3RhZ2Ugd2hlbiB3ZSdyZSBzdGFsbGluZy4uLgorCQkJCSAqLworCQkJCW11c2ItPmFja3BlbmQgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwogCQkJCS8qIHN0YXR1cyBzdGFnZSBtaWdodCBiZSBpbW1lZGlhdGUgKi8KLQkJCQlpZiAoaGFuZGxlZCA+IDApIHsKLQkJCQkJbXVzYi0+YWNrcGVuZCB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOworCQkJCWlmIChoYW5kbGVkID4gMCkKIAkJCQkJbXVzYi0+ZXAwX3N0YXRlID0KIAkJCQkJCU1VU0JfRVAwX1NUQUdFX1NUQVRVU0lOOwotCQkJCX0KIAkJCQlicmVhazsKIAogCQkJLyogc2VxdWVuY2UgIzEgKElOIHRvIGhvc3QpLCBpbmNsdWRlcyBHRVRfU1RBVFVTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKaW5kZXggZDU0NDYwYS4uNzhhMjA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwpAQCAtODQzLDcgKzg0Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvdGdfZGV2OwogCi1zdGF0aWMgaW50IG90Z19pbml0KHN0cnVjdCBpc3AxMzAxICppc3ApCitzdGF0aWMgaW50IGlzcDEzMDFfb3RnX2luaXQoc3RydWN0IGlzcDEzMDEgKmlzcCkKIHsKIAl1MzIgbDsKIApAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIHN0YXRpYyBpbnQgaXNwMTMwMV9vdGdfZW5hYmxlKHN0cnVjdCBpc3AxMzAxICppc3ApCiB7CiAJcG93ZXJfdXAoaXNwKTsKLQlvdGdfaW5pdChpc3ApOworCWlzcDEzMDFfb3RnX2luaXQoaXNwKTsKIAogCS8qIE5PVEU6ICBzaW5jZSB3ZSBkb24ndCBjaGFuZ2UgdGhpcywgdGhpcyBwcm92aWRlcwogCSAqIGEgZmV3IG1vcmUgaW50ZXJydXB0cyB0aGFuIGFyZSBzdHJpY3RseSBuZWVkZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGY5OTQ5OGYuLjIxNmYxODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgImZ0ZGlfc2lvLmgiCisjaW5jbHVkZSAiZnRkaV9zaW9faWRzLmgiCiAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDQ1ODZhMjQuLmIwZTBkNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0xLDcgKzEsMTAgQEAKIC8qCi0gKiBEZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLQorICogRHJpdmVyIGRlZmluaXRpb25zIGZvciB0aGUgRlRESSBVU0IgU2luZ2xlIFBvcnQgU2VyaWFsIENvbnZlcnRlciAtCiAgKiBrbm93biBhcyBGVERJX1NJTyAoU2VyaWFsIElucHV0L091dHB1dCBhcHBsaWNhdGlvbiBvZiB0aGUgY2hpcHNldCkKICAqCisgKiBGb3IgVVNCIHZlbmRvci9wcm9kdWN0IElEcyAoVklEL1BJRCksIHBsZWFzZSBzZWUgZnRkaV9zaW9faWRzLmgKKyAqCisgKgogICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQogICogaHR0cDovL3d3dy5kc2UuY28ubnogLSBjYXQgbm8gWEg0MjE0IEl0IGxvb2tzIHNpbWlsYXIgdG8gdGhpczoKICAqIGh0dHA6Ly93d3cuZGFuc2RhdGEuY29tL3VzYnNlci5odG0gYnV0IEkgY2FuJ3QgYmUgc3VyZSBUaGVyZSBhcmUgb3RoZXIKQEAgLTE3LDg4MSArMjAsOCBAQAogICogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIGZvcm1lcmx5IG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4tIHdyb3RlIHRoZQogICogRlRESV9TSU8gaW1wbGVtZW50YXRpb24uCiAgKgotICogUGhpbGlwcCBHw7xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCi0gKiBmcm9tIFJ1ZG9sZiBHdWdsZXIKLSAqCiAgKi8KIAotI2RlZmluZSBGVERJX1ZJRAkweDA0MDMJLyogVmVuZG9yIElkICovCi0jZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KLSNkZWZpbmUgRlRESV84VTIzMkFNX1BJRCAweDYwMDEgLyogU2ltaWxhciBkZXZpY2UgdG8gU0lPIGFib3ZlICovCi0jZGVmaW5lIEZURElfOFUyMzJBTV9BTFRfUElEIDB4NjAwNiAvKiBGVERJJ3MgYWx0ZXJuYXRlIFBJRCBmb3IgYWJvdmUgKi8KLSNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLwotI2RlZmluZSBGVERJXzIzMlJMX1BJRCAgMHhGQkZBICAvKiBQcm9kdWN0IElEIGZvciBGVDIzMlJMICovCi0jZGVmaW5lIEZURElfNDIzMkhfUElEIDB4NjAxMSAvKiBRdWFkIGNoYW5uZWwgaGktc3BlZWQgZGV2aWNlICovCi0jZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCi0jZGVmaW5lIEZURElfTkZfUklDX1ZJRAkweDBEQ0QJLyogVmVuZG9yIElkICovCi0jZGVmaW5lIEZURElfTkZfUklDX1BJRAkweDAwMDEJLyogUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX1VTQlhfNzA3X1BJRCAweEY4NTcJLyogQURTVGVjaCBJUiBCbGFzdGVyIFVTQlgtNzA3ICovCi0KLS8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAgKi8KLSNkZWZpbmUgTEFSU0VOQlJVU0dBQVJEX1ZJRAkJMHgwRkQ4Ci0jZGVmaW5lIExCX0FMVElUUkFDS19QSUQJCTB4MDAwMQotCi0vKiB3d3cuY2FudXNiLmNvbSBMYXdpY2VsIENBTlVTQiBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9DQU5VU0JfUElEIDB4RkZBOCAvKiBQcm9kdWN0IElkICovCi0KLS8qIEFscGhhTWljcm8gQ29tcG9uZW50cyBBTUMtMjMyVVNCMDEgZGV2aWNlICovCi0jZGVmaW5lIEZURElfQU1DMjMyX1BJRCAweEZGMDAgLyogUHJvZHVjdCBJZCAqLwotCi0vKiB3d3cuY2FuZGFwdGVyLmNvbSBFd2VydCBFbmVyZ3kgU3lzdGVtcyBDQU5kYXB0ZXIgZGV2aWNlICovCi0jZGVmaW5lIEZURElfQ0FOREFQVEVSX1BJRCAweDlGODAgLyogUHJvZHVjdCBJZCAqLwotCi0vKiBTQ1MgSEYgUmFkaW8gTW9kZW1zIFBJRCdzIChodHRwOi8vd3d3LnNjcy1wdGMuY29tKSAqLwotLyogdGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMF9QSUQgMHhEMDEwICAgIC8qIFNDUyBQVEMtSUl1c2IgKi8KLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzFfUElEIDB4RDAxMSAgICAvKiBTQ1MgVHJhY2tlciAvIERTUCBUTkMgKi8KLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzJfUElEIDB4RDAxMgotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfM19QSUQgMHhEMDEzCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV80X1BJRCAweEQwMTQKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzVfUElEIDB4RDAxNQotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNl9QSUQgMHhEMDE2Ci0jZGVmaW5lIEZURElfU0NTX0RFVklDRV83X1BJRCAweEQwMTcKLQotLyogQUNUIFNvbHV0aW9ucyBIb21lUHJvIFpXYXZlIGludGVyZmFjZSAoaHR0cDovL3d3dy5hY3Qtc29sdXRpb25zLmNvbS9Ib21lUHJvLmh0bSkgKi8KLSNkZWZpbmUgRlRESV9BQ1RaV0FWRV9QSUQJMHhGMkQwCi0KLQotLyogd3d3LnN0YXJ0aW5nLXBvaW50LXN5c3RlbXMuY29tIMK1Q2hhbWVsZW9uIGRldmljZSAqLwotI2RlZmluZSBGVERJX01JQ1JPX0NIQU1FTEVPTl9QSUQJMHhDQUEwCS8qIFByb2R1Y3QgSWQgKi8KLQotLyogd3d3LmlydHJhbnMuZGUgZGV2aWNlICovCi0jZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KLQotCi0vKiB3d3cudGhvdWdodHRlY2hub2xvZ3kuY29tLyBUVC1VU0IgcHJvdmlkZSB3aXRoIHByb2NvbXAgdXNlIGZ0ZGlfc2lvICovCi0jZGVmaW5lIEZURElfVFRVU0JfUElEIDB4RkYyMCAvKiBQcm9kdWN0IElkICovCi0KLS8qIGlQbHVzIGRldmljZSAqLwotI2RlZmluZSBGVERJX0lQTFVTX1BJRCAweEQwNzAgLyogUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX0lQTFVTMl9QSUQgMHhEMDcxIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogRE1YNEFMTCBETVggSW50ZXJmYWNlcyAqLwotI2RlZmluZSBGVERJX0RNWDRBTEwgMHhDODUwCi0KLS8qIE9wZW5EQ0MgKHd3dy5vcGVuZGNjLmRlKSBwcm9kdWN0IGlkICovCi0jZGVmaW5lIEZURElfT1BFTkRDQ19QSUQJMHhCRkQ4Ci0jZGVmaW5lIEZURElfT1BFTkRDQ19TTklGRkVSX1BJRAkweEJGRDkKLSNkZWZpbmUgRlRESV9PUEVORENDX1RIUk9UVExFX1BJRAkweEJGREEKLSNkZWZpbmUgRlRESV9PUEVORENDX0dBVEVXQVlfUElECTB4QkZEQgotCi0vKiBTcHJvZyBJSSAoQW5kcmV3IENyb3NsYW5kJ3MgU3Byb2dJSSBEQ0MgaW50ZXJmYWNlKSAqLwotI2RlZmluZSBGVERJX1NQUk9HX0lJCQkweEYwQzgKLQotLyogd3d3LmNyeXN0YWxmb250ei5jb20gZGV2aWNlcyAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEgKi8KLS8qIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lICovCi0jZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNjM0X1BJRCAweEZDMDkJLyogNjM0OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLwotI2RlZmluZSBGVERJX1hGXzYzMV9QSUQgMHhGQzBDCS8qIDYzMTogMjB4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzY0Ml9QSUQgMHhGQzBGCS8qIDY0MjogVHdvIGxpbmUgRGlzcGxheSAqLwotCi0vKiBWaWRlbyBOZXR3b3JrcyBMaW1pdGVkIC8gSG9tZWNob2ljZSBpbiB0aGUgVUsgdXNlIGFuIGZ0ZGktYmFzZWQgZGV2aWNlIGZvciB0aGVpciAxTWIgKi8KLS8qIGJyb2FkYmFuZCBpbnRlcm5ldCBzZXJ2aWNlLiAgVGhlIGZvbGxvd2luZyBQSUQgaXMgZXhoaWJpdGVkIGJ5IHRoZSB1c2IgZGV2aWNlIHN1cHBsaWVkICovCi0vKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwotI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogUENESiB1c2UgZnRkaSBiYXNlZCBkai1jb250cm9sbGVycy4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGZvciB0aGVpciBEQUMtMiBkZXZpY2UKLSAqIGh0dHA6Ly93d3cucGNkamhhcmR3YXJlLmNvbS9EQUMyLmFzcCAoUElEIHNlbnQgYnkgV291dGVyIFBhZXNlbikKLSAqICh0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpICovCi0jZGVmaW5lIEZURElfUENESl9EQUMyX1BJRCAweEZBODgKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheXMsCi0gKiB3aGljaCBhcmUgdGhlIEZUMjMyQk0gKCBzaW1pbGFyIHRvIHRoZSA4VTIzMkFNICkKLSAqLwotI2RlZmluZSBGVERJX01UWE9SQl8wX1BJRCAgICAgIDB4RkEwMCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl8xX1BJRCAgICAgIDB4RkEwMSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl8yX1BJRCAgICAgIDB4RkEwMiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl8zX1BJRCAgICAgIDB4RkEwMyAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl80X1BJRCAgICAgIDB4RkEwNCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl81X1BJRCAgICAgIDB4RkEwNSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotI2RlZmluZSBGVERJX01UWE9SQl82X1BJRCAgICAgIDB4RkEwNiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwotCi0vKiBPT0NEbGluayBieSBKb2VybiBLYWlwZiA8am9lcm5rQHdlYi5kZT4KLSAqIChodHRwOi8vd3d3LmpvZXJub25saW5lLmRlL2R3L2Rva3UucGhwP2lkPXN0YXJ0JmlkeD1wcm9qZWN0czpvb2NkbGluaykgKi8KLSNkZWZpbmUgRlRESV9PT0NETElOS19QSUQJMHhiYWY4CS8qIEFtb250ZWMgSlRBR2tleSAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIE1hdHJpeCBPcmJpdGFsIEZUREkgUmFuZ2UKLSAqIEFueXRoaW5nIGluIHRoaXMgcmFuZ2Ugd2lsbCB1c2UgYW4gRlQyMzJSTC4KLSAqLwotI2RlZmluZSBNVFhPUkJfVklECQkJMHgxQjNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDBfUElECTB4MDEwMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAxX1BJRAkweDAxMDEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMl9QSUQJMHgwMTAyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDNfUElECTB4MDEwMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA0X1BJRAkweDAxMDQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNV9QSUQJMHgwMTA1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDZfUElECTB4MDEwNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA3X1BJRAkweDAxMDcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOF9QSUQJMHgwMTA4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDlfUElECTB4MDEwOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBBX1BJRAkweDAxMEEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQl9QSUQJMHgwMTBCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMENfUElECTB4MDEwQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBEX1BJRAkweDAxMEQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRV9QSUQJMHgwMTBFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEZfUElECTB4MDEwRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEwX1BJRAkweDAxMTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMV9QSUQJMHgwMTExCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTJfUElECTB4MDExMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEzX1BJRAkweDAxMTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNF9QSUQJMHgwMTE0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTVfUElECTB4MDExNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE2X1BJRAkweDAxMTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExN19QSUQJMHgwMTE3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMThfUElECTB4MDExOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE5X1BJRAkweDAxMTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQV9QSUQJMHgwMTFBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUJfUElECTB4MDExQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFDX1BJRAkweDAxMUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRF9QSUQJMHgwMTFECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUVfUElECTB4MDExRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFGX1BJRAkweDAxMUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMF9QSUQJMHgwMTIwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjFfUElECTB4MDEyMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIyX1BJRAkweDAxMjIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyM19QSUQJMHgwMTIzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjRfUElECTB4MDEyNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI1X1BJRAkweDAxMjUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNl9QSUQJMHgwMTI2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjdfUElECTB4MDEyNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI4X1BJRAkweDAxMjgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOV9QSUQJMHgwMTI5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkFfUElECTB4MDEyQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJCX1BJRAkweDAxMkIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQ19QSUQJMHgwMTJDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkRfUElECTB4MDEyRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJFX1BJRAkweDAxMkUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRl9QSUQJMHgwMTJGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzBfUElECTB4MDEzMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMxX1BJRAkweDAxMzEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMl9QSUQJMHgwMTMyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzNfUElECTB4MDEzMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM0X1BJRAkweDAxMzQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNV9QSUQJMHgwMTM1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzZfUElECTB4MDEzNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM3X1BJRAkweDAxMzcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOF9QSUQJMHgwMTM4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzlfUElECTB4MDEzOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNBX1BJRAkweDAxM0EKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQl9QSUQJMHgwMTNCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0NfUElECTB4MDEzQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNEX1BJRAkweDAxM0QKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRV9QSUQJMHgwMTNFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0ZfUElECTB4MDEzRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQwX1BJRAkweDAxNDAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MV9QSUQJMHgwMTQxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDJfUElECTB4MDE0MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQzX1BJRAkweDAxNDMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NF9QSUQJMHgwMTQ0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDVfUElECTB4MDE0NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ2X1BJRAkweDAxNDYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0N19QSUQJMHgwMTQ3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDhfUElECTB4MDE0OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ5X1BJRAkweDAxNDkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0QV9QSUQJMHgwMTRBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEJfUElECTB4MDE0QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRDX1BJRAkweDAxNEMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RF9QSUQJMHgwMTRECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEVfUElECTB4MDE0RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRGX1BJRAkweDAxNEYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MF9QSUQJMHgwMTUwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTFfUElECTB4MDE1MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUyX1BJRAkweDAxNTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1M19QSUQJMHgwMTUzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTRfUElECTB4MDE1NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU1X1BJRAkweDAxNTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Nl9QSUQJMHgwMTU2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTdfUElECTB4MDE1NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU4X1BJRAkweDAxNTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OV9QSUQJMHgwMTU5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUFfUElECTB4MDE1QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVCX1BJRAkweDAxNUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Q19QSUQJMHgwMTVDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNURfUElECTB4MDE1RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVFX1BJRAkweDAxNUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Rl9QSUQJMHgwMTVGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjBfUElECTB4MDE2MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYxX1BJRAkweDAxNjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ml9QSUQJMHgwMTYyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjNfUElECTB4MDE2MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY0X1BJRAkweDAxNjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NV9QSUQJMHgwMTY1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjZfUElECTB4MDE2NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY3X1BJRAkweDAxNjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OF9QSUQJMHgwMTY4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjlfUElECTB4MDE2OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZBX1BJRAkweDAxNkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ql9QSUQJMHgwMTZCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkNfUElECTB4MDE2QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZEX1BJRAkweDAxNkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RV9QSUQJMHgwMTZFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkZfUElECTB4MDE2RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcwX1BJRAkweDAxNzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MV9QSUQJMHgwMTcxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzJfUElECTB4MDE3MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTczX1BJRAkweDAxNzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NF9QSUQJMHgwMTc0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzVfUElECTB4MDE3NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc2X1BJRAkweDAxNzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3N19QSUQJMHgwMTc3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzhfUElECTB4MDE3OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc5X1BJRAkweDAxNzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3QV9QSUQJMHgwMTdBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0JfUElECTB4MDE3QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdDX1BJRAkweDAxN0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RF9QSUQJMHgwMTdECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0VfUElECTB4MDE3RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdGX1BJRAkweDAxN0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MF9QSUQJMHgwMTgwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODFfUElECTB4MDE4MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgyX1BJRAkweDAxODIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4M19QSUQJMHgwMTgzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODRfUElECTB4MDE4NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg1X1BJRAkweDAxODUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Nl9QSUQJMHgwMTg2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODdfUElECTB4MDE4NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg4X1BJRAkweDAxODgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OV9QSUQJMHgwMTg5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEFfUElECTB4MDE4QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThCX1BJRAkweDAxOEIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Q19QSUQJMHgwMThDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOERfUElECTB4MDE4RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThFX1BJRAkweDAxOEUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Rl9QSUQJMHgwMThGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTBfUElECTB4MDE5MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkxX1BJRAkweDAxOTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ml9QSUQJMHgwMTkyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTNfUElECTB4MDE5MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk0X1BJRAkweDAxOTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NV9QSUQJMHgwMTk1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTZfUElECTB4MDE5NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk3X1BJRAkweDAxOTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OF9QSUQJMHgwMTk4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTlfUElECTB4MDE5OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlBX1BJRAkweDAxOUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ql9QSUQJMHgwMTlCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUNfUElECTB4MDE5QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlEX1BJRAkweDAxOUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RV9QSUQJMHgwMTlFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUZfUElECTB4MDE5RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEwX1BJRAkweDAxQTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMV9QSUQJMHgwMUExCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTJfUElECTB4MDFBMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEzX1BJRAkweDAxQTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNF9QSUQJMHgwMUE0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTVfUElECTB4MDFBNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE2X1BJRAkweDAxQTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBN19QSUQJMHgwMUE3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQThfUElECTB4MDFBOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE5X1BJRAkweDAxQTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQV9QSUQJMHgwMUFBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUJfUElECTB4MDFBQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFDX1BJRAkweDAxQUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRF9QSUQJMHgwMUFECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUVfUElECTB4MDFBRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFGX1BJRAkweDAxQUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMF9QSUQJMHgwMUIwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjFfUElECTB4MDFCMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIyX1BJRAkweDAxQjIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCM19QSUQJMHgwMUIzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjRfUElECTB4MDFCNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI1X1BJRAkweDAxQjUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNl9QSUQJMHgwMUI2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjdfUElECTB4MDFCNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI4X1BJRAkweDAxQjgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOV9QSUQJMHgwMUI5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkFfUElECTB4MDFCQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJCX1BJRAkweDAxQkIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQ19QSUQJMHgwMUJDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkRfUElECTB4MDFCRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJFX1BJRAkweDAxQkUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRl9QSUQJMHgwMUJGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzBfUElECTB4MDFDMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMxX1BJRAkweDAxQzEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMl9QSUQJMHgwMUMyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzNfUElECTB4MDFDMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM0X1BJRAkweDAxQzQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNV9QSUQJMHgwMUM1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzZfUElECTB4MDFDNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM3X1BJRAkweDAxQzcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOF9QSUQJMHgwMUM4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzlfUElECTB4MDFDOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNBX1BJRAkweDAxQ0EKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQl9QSUQJMHgwMUNCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0NfUElECTB4MDFDQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNEX1BJRAkweDAxQ0QKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRV9QSUQJMHgwMUNFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0ZfUElECTB4MDFDRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQwX1BJRAkweDAxRDAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMV9QSUQJMHgwMUQxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDJfUElECTB4MDFEMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQzX1BJRAkweDAxRDMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENF9QSUQJMHgwMUQ0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDVfUElECTB4MDFENQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ2X1BJRAkweDAxRDYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEN19QSUQJMHgwMUQ3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDhfUElECTB4MDFEOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ5X1BJRAkweDAxRDkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQV9QSUQJMHgwMURBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREJfUElECTB4MDFEQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURDX1BJRAkweDAxREMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERF9QSUQJMHgwMURECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREVfUElECTB4MDFERQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURGX1BJRAkweDAxREYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMF9QSUQJMHgwMUUwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTFfUElECTB4MDFFMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUyX1BJRAkweDAxRTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFM19QSUQJMHgwMUUzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTRfUElECTB4MDFFNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU1X1BJRAkweDAxRTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNl9QSUQJMHgwMUU2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTdfUElECTB4MDFFNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU4X1BJRAkweDAxRTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOV9QSUQJMHgwMUU5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUFfUElECTB4MDFFQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVCX1BJRAkweDAxRUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQ19QSUQJMHgwMUVDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRURfUElECTB4MDFFRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVFX1BJRAkweDAxRUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRl9QSUQJMHgwMUVGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjBfUElECTB4MDFGMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYxX1BJRAkweDAxRjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMl9QSUQJMHgwMUYyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjNfUElECTB4MDFGMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY0X1BJRAkweDAxRjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNV9QSUQJMHgwMUY1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjZfUElECTB4MDFGNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY3X1BJRAkweDAxRjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOF9QSUQJMHgwMUY4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjlfUElECTB4MDFGOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZBX1BJRAkweDAxRkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQl9QSUQJMHgwMUZCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkNfUElECTB4MDFGQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZEX1BJRAkweDAxRkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRV9QSUQJMHgwMUZFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkZfUElECTB4MDFGRgotCi0KLQotLyogSW50ZXJiaW9tZXRyaWNzIFVTQiBJL08gQm9hcmQgKi8KLS8qIERldmVsb3BlZCBmb3IgSW50ZXJiaW9tZXRyaWNzIGJ5IFJ1ZG9sZiBHdWdsZXIgKi8KLSNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX1ZJRCAgICAgICAgICAgICAgMHgxMjA5Ci0jZGVmaW5lIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCAgICAgIDB4MTAwMgotI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCAweDEwMDYKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCi0gKiBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCi0gKi8KLSNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFNlYWxldmVsIFNlYUxJTksrIGFkYXB0ZXJzLgotICogKE9yaWdpbmFsIGxpc3Qgc2VudCBieSBUdWFuIEhvYW5nLiAgSWFuIEFiYm90dCByZW5hbWVkIHRoZSBtYWNyb3MgYW5kCi0gKiByZW1vdmVkIHNvbWUgUElEcyB0aGF0IGRvbid0IHNlZW0gdG8gbWF0Y2ggYW55IGV4aXN0aW5nIHByb2R1Y3RzLikKLSAqLwotI2RlZmluZSBTRUFMRVZFTF9WSUQJCTB4MGM1MgkvKiBTZWFsZXZlbCBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjEwMV9QSUQJMHgyMTAxCS8qIFNlYUxJTksrMjMyICgyMTAxLzIxMDUpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDJfUElECTB4MjEwMgkvKiBTZWFMSU5LKzQ4NSAoMjEwMikgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjEwM19QSUQJMHgyMTAzCS8qIFNlYUxJTksrMjMySSAoMjEwMykgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjEwNF9QSUQJMHgyMTA0CS8qIFNlYUxJTksrNDg1SSAoMjEwNCkgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjEwNl9QSUQJMHg5MDIwCS8qIFNlYUxJTksrNDIyICgyMTA2KSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAxXzFfUElECTB4MjIxMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDJfMV9QSUQJMHgyMjEyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAyXzJfUElECTB4MjIyMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwM18yX1BJRAkweDIyMjMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV8xX1BJRAkweDI0MTEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzNfUElECTB4MjQzMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV80X1BJRAkweDI0NDEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzJfUElECTB4MjQyMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl8zX1BJRAkweDI0MzIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAzXzFfUElECTB4MjQxMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAzXzJfUElECTB4MjQyMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAzXzRfUElECTB4MjQ0MwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzFfUElECTBYMjgxMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfM19QSUQJMFgyODMxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzRfUElECTBYMjg0MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfNl9QSUQJMFgyODYxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzdfUElECTBYMjg3MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDcgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfMV9QSUQJMFgyODEyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzJfUElECTBYMjgyMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfNF9QSUQJMFgyODQyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzVfUElECTBYMjg1MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDUgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfN19QSUQJMFgyODcyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzhfUElECTBYMjg4MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDggKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM18yX1BJRAkwWDI4MjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfM19QSUQJMFgyODMzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM181X1BJRAkwWDI4NTMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA1ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfNl9QSUQJMFgyODYzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM184X1BJRAkwWDI4ODMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA4ICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0d28gS09CSUwgY2hpcGNhcmQgdGVybWluYWxzLgotICovCi0jZGVmaW5lIEtPQklMX1ZJRAkJMHgwZDQ2CS8qIEtPQklMIFZlbmRvciBJRCAqLwotI2RlZmluZSBLT0JJTF9DT05WX0IxX1BJRAkweDIwMjAJLyogS09CSUwgS29udmVydGVyIGZvciBCMSAqLwotI2RlZmluZSBLT0JJTF9DT05WX0tBQU5fUElECTB4MjAyMQkvKiBLT0JJTF9Lb252ZXJ0ZXIgZm9yIEtBQU4gKi8KLQotLyoKLSAqIEljb20gSUQtMSBkaWdpdGFsIHRyYW5zY2VpdmVyCi0gKi8KLQotI2RlZmluZSBJQ09NX0lEMV9WSUQgICAgICAgICAgICAweDBDMjYKLSNkZWZpbmUgSUNPTV9JRDFfUElEICAgICAgICAgICAgMHgwMDA0Ci0KLS8qCi0gKiBBU0suZnIgZGV2aWNlcwotICovCi0jZGVmaW5lIEZURElfQVNLX1JEUjQwMF9QSUQJMHhDOTkxCS8qIEFTSyBSRFIgNDAwIHNlcmllcyBjYXJkIHJlYWRlciAqLwotCi0vKgotICogRlRESSBVU0IgVUFSVCBjaGlwcyB1c2VkIGluIGNvbnN0cnVjdGlvbiBwcm9qZWN0cyBmcm9tIHRoZQotICogRWxla3RvciBFbGVjdHJvbmljcyBtYWdhemluZSAoaHR0cDovL2VsZWt0b3ItZWxlY3Ryb25pY3MuY28udWspCi0gKi8KLSNkZWZpbmUgRUxFS1RPUl9WSUQJCTB4MEM3RAotI2RlZmluZSBFTEVLVE9SX0ZUMzIzUl9QSUQJMHgwMDA1CS8qIFJGSUQtUmVhZGVyLCBpc3N1ZSAwOS0yMDA2ICovCi0KLS8qCi0gKiBEU1MtMjAgU3luYyBTdGF0aW9uIGZvciBTb255IEVyaWNzc29uIFA4MDAKLSAqLwotI2RlZmluZSBGVERJX0RTUzIwX1BJRCAgICAgICAgICAweEZDODIKLQotLyoKLSAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cwotICovCi0jZGVmaW5lIEZURElfSEVfVElSQTFfUElECTB4RkE3OAkvKiBUaXJhLTEgSVIgdHJhbnNjZWl2ZXIgKi8KLQotLyogVVNCLVVJUlQgLSBBbiBpbmZyYXJlZCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgdXNpbmcgdGhlIDhVMjMyQU0gY2hpcCAqLwotLyogaHR0cDovL2hvbWUuZWFydGhsaW5rLm5ldC9+anJoZWVzL1VTQlVJUlQvaW5kZXguaHRtICovCi0jZGVmaW5lIEZURElfVVNCX1VJUlRfUElECTB4Rjg1MAkvKiBQcm9kdWN0IElkICovCi0KLS8qIFROQy1YIFVTQi10by1wYWNrZXQtcmFkaW8gYWRhcHRlciwgdmVyc2lvbnMgcHJpb3IgdG8gMy4wIChETFAgbW9kdWxlKSAqLwotCi0jZGVmaW5lIEZURElfVE5DX1hfUElECQkweEVCRTAKLQotLyoKLSAqIEVMViBVU0IgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ2hyaXN0aWFuIEFidCBvZiBFTFYgKHd3dy5lbHYuZGUpLgotICogQWxsIG9mIHRoZXNlIGRldmljZXMgdXNlIEZUREkncyB2ZW5kb3IgSUQgKDB4MDQwMykuCi0gKgotICogVGhlIHByZXZpb3VzbHkgaW5jbHVkZWQgUElEIGZvciB0aGUgVU8gMTAwIG1vZHVsZSB3YXMgaW5jb3JyZWN0LgotICogSW4gZmFjdCwgdGhhdCBQSUQgd2FzIGZvciBFTFYncyBVUiAxMDAgVVNCLVJTMjMyIGNvbnZlcnRlciAoMHhGQjU4KS4KLSAqCi0gKiBBcm1pbiBMYWV1Z2VyIG9yaWdpbmFsbHkgc2VudCB0aGUgUElEIGZvciB0aGUgVU0gMTAwIG1vZHVsZS4KLSAqLwotI2RlZmluZSBGVERJX1IyMDAwS1VfVFJVRV9STkcJMHhGQjgwICAvKiBSMjAwMEtVIFRSVUUgUk5HICovCi0jZGVmaW5lIEZURElfRUxWX1VSMTAwX1BJRAkweEZCNTgJLyogVVNCLVJTMjMyLVVtc2V0emVyIChVUiAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VNMTAwX1BJRAkweEZCNUEJLyogVVNCLU1vZHVsIFVNIDEwMCAqLwotI2RlZmluZSBGVERJX0VMVl9VTzEwMF9QSUQJMHhGQjVCCS8qIFVTQi1Nb2R1bCBVTyAxMDAgKi8KLSNkZWZpbmUgRlRESV9FTFZfQUxDODUwMF9QSUQJMHhGMDZFCS8qIEFMQyA4NTAwIEV4cGVydCAqLwotLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCi0gKiBNUyBXaW5kb3dzLCByYXRoZXIgdGhhbiB0aGUgRlRESSBWaXJ0dWFsIENvbSBQb3J0IGRyaXZlcnMuCi0gKiBNYXliZSB0aGVzZSB3aWxsIGJlIGVhc2llciB0byB1c2Ugd2l0aCB0aGUgbGliZnRkaS9saWJ1c2IgdXNlci1zcGFjZQotICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCi0jZGVmaW5lIEZURElfRUxWX0NMSTcwMDBfUElECTB4RkI1OQkvKiBDb21wdXRlci1MaWdodC1JbnRlcmZhY2UgKENMSSA3MDAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9QUFM3MzMwX1BJRAkweEZCNUMJLyogUHJvY2Vzc29yLVBvd2VyLVN1cHBseSAoUFBTIDczMzApICovCi0jZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVURGNzdfUElECTB4RkI1RQkvKiBVU0IgRENGIEZ1bmt1cmggKFVERiA3NykgKi8KLSNkZWZpbmUgRlRESV9FTFZfVUlPODhfUElECTB4RkI1RgkvKiBVU0ItSS9PIEludGVyZmFjZSAoVUlPIDg4KSAqLwotI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLwotI2RlZmluZSBGVERJX0VMVl9VREE3X1BJRAkweEYwNjkJLyogVVNCLURBLVdhbmRsZXIgKFVEQSA3KSAqLwotI2RlZmluZSBGVERJX0VMVl9VU0kyX1BJRAkweEYwNkEJLyogVVNCLVNjaHJpdHRtb3RvcmVuLUludGVyZmFjZSAoVVNJIDIpICovCi0jZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUENEMjAwX1BJRAkweEYwNkMJLyogUEMtRGF0ZW5sb2dnZXIgKFBDRCAyMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VMQTIwMF9QSUQJMHhGMDZECS8qIFVTQi1MQ0QtQW5zdGV1ZXJ1bmcgKFVMQSAyMDApICovCi0jZGVmaW5lIEZURElfRUxWX0ZIWjEwMDBQQ19QSUQJMHhGMDZGCS8qIEZIWiAxMDAwIFBDICovCi0jZGVmaW5lIEZURElfRUxWX0NTSThfUElECTB4RTBGMAkvKiBDb21wdXRlci1TY2hhbHQtSW50ZXJmYWNlIChDU0kgOCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfRU0xMDAwRExfUElECTB4RTBGMQkvKiBQQy1EYXRlbmxvZ2dlciBmdWVyIEVuZXJnaWVtb25pdG9yIChFTSAxMDAwIERMKSAqLwotI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUkZQNTAwX1BJRAkweEUwRjMJLyogSEYtTGVpc3R1bmdzbWVzc2VyIChSRlAgNTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9GUzIwU0lHX1BJRAkweEUwRjQJLyogU2lnbmFsZ2ViZXIgKEZTIDIwIFNJRykgKi8KLSNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KLSNkZWZpbmUgRlRESV9FTFZfRkhaMTMwMFBDX1BJRAkweEUwRTgJLyogRkhaIDEzMDAgUEMgKi8KLSNkZWZpbmUgRlRESV9FTFZfV1M1MDBfUElECTB4RTBFOQkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyA1MDApICovCi0jZGVmaW5lIEZURElfRUxWX0hTNDg1X1BJRAkweEUwRUEJLyogVVNCIHRvIFJTLTQ4NSBhZGFwdGVyICovCi0jZGVmaW5lIEZURElfRUxWX0VNMTAxMFBDX1BJRAkweEUwRUYJLyogRW5nZXJ5IG1vbml0b3IgRU0gMTAxMCBQQyAqLwotI2RlZmluZSBGVERJX1BISV9GSVNDT19QSUQgICAgICAweEU0MEIgIC8qIFBISSBGaXNjbyBVU0IgdG8gU2VyaWFsIGNhYmxlICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgSUQgVEVDSCAod3d3LmlkdC1uZXQuY29tKSBkZXZpY2VzCi0gKi8KLSNkZWZpbmUgSURURUNIX1ZJRAkJMHgwQUNECS8qIElEIFRFQ0ggVmVuZG9yIElEICovCi0jZGVmaW5lIElEVEVDSF9JRFQxMjIxVV9QSUQJMHgwMzAwCS8qIElEVDEyMjFVIFVTQiB0byBSUy0yMzIgYWRhcHRlciAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIE9tbmlkaXJlY3Rpb25hbCBDb250cm9sIFRlY2hub2xvZ3ksIEluYy4gZGV2aWNlcwotICovCi0jZGVmaW5lIE9DVF9WSUQJCQkweDBCMzkJLyogT0NUIHZlbmRvciBJRCAqLwotLyogTm90ZTogT0NUIFVTMTAxIGlzIGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoTlopIFhINjM4MSAqLwotLyogQWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChBdXMpIFhINjQ1MSAqLwotLyogQWxzbyByZWJhZGdlZCBhcyBTSUlHIEluYy4gbW9kZWwgVVMyMzA4IGhhcmR3YXJlIHZlcnNpb24gMSAqLwotI2RlZmluZSBPQ1RfVVMxMDFfUElECQkweDA0MjEJLyogT0NUIFVTMTAxIFVTQiB0byBSUy0yMzIgKi8KLQotLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCi0jZGVmaW5lIEZURElfUElFR1JPVVBfUElECTB4RjIwOAkvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgQXJ0ZW1pcyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKLSAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXJ0ZW1pc2NjZC5jby51ay8KLSAqLwotI2RlZmluZSBGVERJX0FSVEVNSVNfUElECTB4REYyOAkvKiBBbGwgQXJ0ZW1pcyBDYW1lcmFzICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgQVRJSyBJbnN0cnVtZW50cyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKLSAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXRpay1pbnN0cnVtZW50cy5jb20vCi0gKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2X1BJRAkweERGMzAJLyogQVRJSyBBVEstMTYgR3JheXNjYWxlIENhbWVyYSAqLwotI2RlZmluZSBGVERJX0FUSUtfQVRLMTZDX1BJRAkweERGMzIJLyogQVRJSyBBVEstMTZDIENvbG91ciBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJfUElECTB4REYzMQkvKiBBVElLIEFUSy0xNkhSIEdyYXlzY2FsZSBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJDX1BJRAkweERGMzMJLyogQVRJSyBBVEstMTZIUkMgQ29sb3VyIENhbWVyYSAqLwotI2RlZmluZSBGVERJX0FUSUtfQVRLMTZJQ19QSUQgICAweERGMzUgIC8qIEFUSUsgQVRLLTE2SUMgR3JheXNjYWxlIENhbWVyYSAqLwotCi0vKgotICogUHJvdGVnbyBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8xCTB4RkM3MAkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCi0jZGVmaW5lIFBST1RFR09fUjJYMAkJMHhGQzcxCS8qIFIyMDAtVVNCIFRSTkcgdW5pdCAoUjIxMCwgUjIyMCwgYW5kIFIyMzApICovCi0jZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8zCTB4RkM3MgkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCi0jZGVmaW5lIFBST1RFR09fU1BFQ0lBTF80CTB4RkM3MwkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCi0KLS8qCi0gKiBHdWRlIEFuYWxvZy0gdW5kIERpZ2l0YWxzeXN0ZW1lIEdtYkgKLSAqLwotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOF9QSUQgICAgMHhFODA4Ci0jZGVmaW5lIEZURElfR1VERUFEU19FODA5X1BJRCAgICAweEU4MDkKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEFfUElEICAgIDB4RTgwQQotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQl9QSUQgICAgMHhFODBCCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBDX1BJRCAgICAweEU4MEMKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MERfUElEICAgIDB4RTgwRAotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRV9QSUQgICAgMHhFODBFCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBGX1BJRCAgICAweEU4MEYKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4ODhfUElEICAgIDB4RTg4OCAgLyogRXhwZXJ0IElTRE4gQ29udHJvbCBVU0IgKi8KLSNkZWZpbmUgRlRESV9HVURFQURTX0U4ODlfUElEICAgIDB4RTg4OSAgLyogVVNCIFJTLTIzMiBPcHRvQnJpZGdlICovCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhBX1BJRCAgICAweEU4OEEKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEJfUElEICAgIDB4RTg4QgotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Q19QSUQgICAgMHhFODhDCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhEX1BJRCAgICAweEU4OEQKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEVfUElEICAgIDB4RTg4RQotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Rl9QSUQgICAgMHhFODhGCi0KLS8qCi0gKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIExJTlhfU0RNVVNCUVNTX1BJRAkweEY0NDgJLyogTGlueCBTRE0tVVNCLVFTLVMgKi8KLSNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5ICAgLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCi0jZGVmaW5lIExJTlhfRlVUVVJFXzBfUElEICAgMHhGNDRBICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCi0jZGVmaW5lIExJTlhfRlVUVVJFXzFfUElEICAgMHhGNDRCICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCi0jZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCi0KLS8qIENDUyBJbmMuIElDRFUvSUNEVTQwIHByb2R1Y3QgSUQgLSB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgKi8KLS8qIHVuaXQgZm9yIFBJQzE2J3MvUElDMTgncyAqLwotI2RlZmluZSBGVERJX0NDU0lDRFUyMF8wX1BJRCAgICAweEY5RDAKLSNkZWZpbmUgRlRESV9DQ1NJQ0RVNDBfMV9QSUQgICAgMHhGOUQxCi0jZGVmaW5lIEZURElfQ0NTTUFDSFhfMl9QSUQgICAgIDB4RjlEMgotI2RlZmluZSBGVERJX0NDU0xPQURfTl9HT18zX1BJRCAweEY5RDMKLSNkZWZpbmUgRlRESV9DQ1NJQ0RVNjRfNF9QSUQgICAgMHhGOUQ0Ci0jZGVmaW5lIEZURElfQ0NTUFJJTUU4XzVfUElEICAgIDB4RjlENQotCi0vKiBJbnNpZGUgQWNjZXNzbyBjb250YWN0bGVzcyByZWFkZXIgKGh0dHA6Ly93d3cuaW5zaWRlZnIuY29tKSAqLwotI2RlZmluZSBJTlNJREVfQUNDRVNTTwkJMHhGQUQwCi0KLS8qCi0gKiBJbnRyZXBpZCBDb250cm9sIFN5c3RlbXMgKGh0dHA6Ly93d3cuaW50cmVwaWRjcy5jb20vKSBWYWx1ZUNBTiBhbmQgTmVvVkkKLSAqLwotI2RlZmluZSBJTlRSRVBJRF9WSUQJCTB4MDkzQwotI2RlZmluZSBJTlRSRVBJRF9WQUxVRUNBTl9QSUQJMHgwNjAxCi0jZGVmaW5lIElOVFJFUElEX05FT1ZJX1BJRAkweDA3MDEKLQotLyoKLSAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICi0gKi8KLSNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KLSNkZWZpbmUgRkFMQ09NX1NBTUJBX1BJRAkweDAwMDUJLyogRmFsY29tIFNhbWJhIFVTQiBHUFJTIG1vZGVtICovCi0KLS8qCi0gKiBTVVVOVE8gcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBGVERJX1NVVU5UT19TUE9SVFNfUElECTB4RjY4MAkvKiBTdXVudG8gU3BvcnRzIGluc3RydW1lbnQgKi8KLQotLyoKLSAqIE9jZWFuaWMgcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBGVERJX09DRUFOSUNfUElECTB4RjQ2MCAgLyogT2NlYW5pYyBkaXZlIGluc3RydW1lbnQgKi8KLQotLyoKLSAqIFRUaSAoVGh1cmxieSBUaGFuZGFyIEluc3RydW1lbnRzKQotICovCi0jZGVmaW5lIFRUSV9WSUQJCQkweDEwM0UJLyogVmVuZG9yIElkICovCi0jZGVmaW5lIFRUSV9RTDM1NVBfUElECQkweDAzRTgJLyogVFRpIFFMMzU1UCBwb3dlciBzdXBwbHkgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBCJkIgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCi0gKi8KLSNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLwotI2RlZmluZSBCQU5EQl9VU09UTDRfUElECTB4QUMwMQkvKiBVU09UTDQgSXNvbGF0ZWQgUlMtNDg1IENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU1RMNF9QSUQJCTB4QUMwMgkvKiBVU1RMNCBSUy00ODUgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTTzlNTDJfUElECTB4QUMwMwkvKiBVU085TUwyIElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNPUFRMNF9QSUQJMHhBQzExCi0jZGVmaW5lIEJBTkRCX1VTUFRMNF9QSUQJMHhBQzEyCi0jZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl8yX1BJRAkweEFDMTYKLSNkZWZpbmUgQkFOREJfVVNPOU1MMkRSX1BJRAkweEFDMTcKLSNkZWZpbmUgQkFOREJfVVNPUFRMNERSMl9QSUQJMHhBQzE4CS8qIFVTT1BUTDRSLTIgMi1wb3J0IElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNPUFRMNERSX1BJRAkweEFDMTkKLSNkZWZpbmUgQkFOREJfNDg1VVNCOUZfMldfUElECTB4QUMyNQotI2RlZmluZSBCQU5EQl80ODVVU0I5Rl80V19QSUQJMHhBQzI2Ci0jZGVmaW5lIEJBTkRCXzIzMlVTQjlNX1BJRAkweEFDMjcKLSNkZWZpbmUgQkFOREJfNDg1VVNCVEJfMldfUElECTB4QUMzMwotI2RlZmluZSBCQU5EQl80ODVVU0JUQl80V19QSUQJMHhBQzM0Ci0jZGVmaW5lIEJBTkRCX1RUTDVVU0I5TV9QSUQJMHhBQzQ5Ci0jZGVmaW5lIEJBTkRCX1RUTDNVU0I5TV9QSUQJMHhBQzUwCi0jZGVmaW5lIEJBTkRCX1paX1BST0cxX1VTQl9QSUQJMHhCQTAyCi0KLS8qCi0gKiBSTSBNaWNoYWVsaWRlcyBDQU52aWV3IFVTQiAoaHR0cDovL3d3dy5ybWNhbi5jb20pCi0gKiBDQU4gZmllbGRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGVkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKLSAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgotICovCi0jZGVmaW5lIEZURElfUk1fQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIEVWRVIgRWNvIFBybyBVUFMgKGh0dHA6Ly93d3cuZXZlci5jb20ucGwvKQotICovCi0KLSNkZWZpbmUJRVZFUl9FQ09fUFJPX0NEUwkweGU1MjAJLyogUlMtMjMyIGNvbnZlcnRlciAqLwotCi0vKgotICogNE4tR0FMQVhZLkRFIFBJRHMgZm9yIENBTi1VU0IsIFVTQi1SUzIzMiwgVVNCLVJTNDIyLCBVU0ItUlM0ODUsCi0gKiBVU0ItVFRZIGFjdGl2LCBVU0ItVFRZIHBhc3Npdi4gIFNvbWUgUElEcyBhcmUgdXNlZCBieSBzZXZlcmFsIGRldmljZXMKLSAqIGFuZCBJJ20gbm90IGVudGlyZWx5IHN1cmUgd2hpY2ggYXJlIHVzZWQgYnkgd2hpY2guCi0gKi8KLSNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCi0jZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzJfUElECTB4RjNDMQotCi0vKgotICogTW9iaWxpdHkgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCi0gKi8KLSNkZWZpbmUgTU9CSUxJVFlfVklECQkJMHgxMzQyCi0jZGVmaW5lIE1PQklMSVRZX1VTQl9TRVJJQUxfUElECQkweDAyMDIJLyogRWFzaURvY2sgVVNCIDIwMCBzZXJpYWwgKi8KLQotLyoKLSAqIG1pY3JvSEFNIHByb2R1Y3QgSURzIChodHRwOi8vd3d3Lm1pY3JvaGFtLmNvbSkuCi0gKiBTdWJtaXR0ZWQgYnkgSnVzdGluIEJ1cmtldCAoS0wxUkwpIDx6b3J0b25AanRhbi5jb20+Ci0gKiBhbmQgTWlrZSBTdHVkZXIgKEs2RUVQKSA8azZlZXBAaGFtc29mdHdhcmUub3JnPi4KLSAqIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPiBhZGRlZCBhIGZldyBtb3JlIGZyb20gdGhlIGRyaXZlciBJTkYgZmlsZS4KLSAqLwotI2RlZmluZSBGVERJX01IQU1fS1dfUElEIDB4RUVFOAkJLyogVVNCLUtXIGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fWVNfUElEIDB4RUVFOQkJLyogVVNCLVlTIGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fWTZfUElEIDB4RUVFQQkJLyogVVNCLVk2IGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fWThfUElEIDB4RUVFQgkJLyogVVNCLVk4IGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fSUNfUElEIDB4RUVFQwkJLyogVVNCLUlDIGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fREI5X1BJRCAweEVFRUQJLyogVVNCLURCOSBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1JTMjMyX1BJRCAweEVFRUUJLyogVVNCLVJTMjMyIGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fWTlfUElEIDB4RUVFRgkJLyogVVNCLVk5IGludGVyZmFjZSAqLwotCi0vKgotICogQWN0aXZlIFJvYm90cyBwcm9kdWN0IGlkcy4KLSAqLwotI2RlZmluZSBGVERJX0FDVElWRV9ST0JPVFNfUElECTB4RTU0OAkvKiBVU0IgY29tbXMgYm9hcmQgKi8KLQotLyoKLSAqIFhzZW5zIFRlY2hub2xvZ2llcyBCViBwcm9kdWN0cyAoaHR0cDovL3d3dy54c2Vucy5jb20pLgotICovCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8wX1BJRAkweEQzODgKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzFfUElECTB4RDM4OQotI2RlZmluZSBYU0VOU19DT05WRVJURVJfMl9QSUQJMHhEMzhBCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8zX1BJRAkweEQzOEIKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzRfUElECTB4RDM4QwotI2RlZmluZSBYU0VOU19DT05WRVJURVJfNV9QSUQJMHhEMzhECi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl82X1BJRAkweEQzOEUKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzdfUElECTB4RDM4RgotCi0vKgotICogVGVyYXRyb25payBwcm9kdWN0IGlkcy4KLSAqIFN1Ym1pdHRlZCBieSBPLiBXw7ZsZmVsc2NobmVpZGVyLgotICovCi0jZGVmaW5lIEZURElfVEVSQVRST05JS19WQ1BfUElECSAweEVDODgJLyogVGVyYXRyb25payBkZXZpY2UgKHByZWZlcnJpbmcgVkNQIGRyaXZlciBvbiB3aW5kb3dzKSAqLwotI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfRDJYWF9QSUQgMHhFQzg5CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIEQyWFggZHJpdmVyIG9uIHdpbmRvd3MpICovCi0KLS8qCi0gKiBFdm9sdXRpb24gUm9ib3RpY3MgcHJvZHVjdHMgKGh0dHA6Ly93d3cuZXZvbHV0aW9uLmNvbS8pLgotICogU3VibWl0dGVkIGJ5IFNoYXduIE0uIExhdmVsbGUuCi0gKi8KLSNkZWZpbmUgRVZPTFVUSU9OX1ZJRAkJMHhERUVFCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCi0jZGVmaW5lIEVWT184VTIzMkFNX1BJRAkweDAyRkYJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTIgKEZUMjMyQU0pKi8KLSNkZWZpbmUgRVZPX0hZQlJJRF9QSUQJCTB4MDMwMgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKEZUMjMyQk0pKi8KLSNkZWZpbmUgRVZPX1JDTTRfUElECQkweDAzMDMJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEICovCi0KLS8qIFB5cmFtaWQgQ29tcHV0ZXIgR21iSCAqLwotI2RlZmluZSBGVERJX1BZUkFNSURfUElECTB4RTZDOAkvKiBQeXJhbWlkIEFwcGxpYW5jZSBEaXNwbGF5ICovCi0KLS8qCi0gKiBOREkgKHd3dy5uZGlnaXRhbC5jb20pIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9ORElfSFVDX1BJRAkJMHhEQTcwCS8qIE5ESSBIb3N0IFVTQiBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgRlRESV9ORElfU1BFQ1RSQV9TQ1VfUElECTB4REE3MQkvKiBOREkgU3BlY3RyYSBTQ1UgKi8KLSNkZWZpbmUgRlRESV9ORElfRlVUVVJFXzJfUElECQkweERBNzIJLyogTkRJIGZ1dHVyZSBkZXZpY2UgIzIgKi8KLSNkZWZpbmUgRlRESV9ORElfRlVUVVJFXzNfUElECQkweERBNzMJLyogTkRJIGZ1dHVyZSBkZXZpY2UgIzMgKi8KLSNkZWZpbmUgRlRESV9ORElfQVVST1JBX1NDVV9QSUQJCTB4REE3NAkvKiBOREkgQXVyb3JhIFNDVSAqLwotCi0vKgotICogUG9zaWZsZXggaW5jIHJldGFpbCBlcXVpcG1lbnQgKGh0dHA6Ly93d3cucG9zaWZsZXguY29tLnR3KQotICovCi0jZGVmaW5lIFBPU0lGTEVYX1ZJRAkJMHgwZDNhICAvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgUE9TSUZMRVhfUFA3MDAwX1BJRAkweDAzMDAgIC8qIFBQLTcwMDBJSSB0aGVybWFsIHByaW50ZXIgKi8KLQotLyoKLSAqIFdlc3RyZXggSW50ZXJuYXRpb25hbCBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDb3J5IExlZQotICovCi0jZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF83NzdfUElECTB4REMwMAkvKiBNb2RlbCA3NzcgKi8KLSNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzg5MDBGX1BJRAkweERDMDEJLyogTW9kZWwgODkwMEYgKi8KLQotLyoKLSAqIFJSLUNpcktpdHMgTG9jb0J1ZmZlciBVU0IgKGh0dHA6Ly93d3cucnItY2lya2l0cy5jb20pCi0gKi8KLSNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCi0KLS8qCi0gKiBFY2xvIChodHRwOi8vd3d3LmVjbG8ucHQvKSBwcm9kdWN0IElEcy4KLSAqIFBJRCAweEVBOTAgc3VibWl0dGVkIGJ5IE1hcnRpbiBHcmlsbC4KLSAqLwotI2RlZmluZSBGVERJX0VDTE9fQ09NXzFXSVJFX1BJRAkweEVBOTAJLyogQ09NIHRvIDEtV2lyZSBVU0IgYWRhcHRvciAqLwotCi0vKgotICogUGFwb3VjaCBwcm9kdWN0cyAoaHR0cDovL3d3dy5wYXBvdWNoLmNvbS8pCi0gKiBTdWJtaXR0ZWQgYnkgRm9sa2VydCB2YW4gSGV1c2RlbgotICovCi0KLSNkZWZpbmUgUEFQT1VDSF9WSUQJCQkweDUwNTAJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFBBUE9VQ0hfVE1VX1BJRAkJCTB4MDQwMAkvKiBUTVUgVVNCIFRoZXJtb21ldGVyICovCi0jZGVmaW5lIFBBUE9VQ0hfUVVJRE80eDRfUElECQkweDA5MDAJLyogUXVpZG8gNC80IE1vZHVsZSAqLwotCi0vKgotICogQUNHIElkZW50aWZpY2F0aW9uIFRlY2hub2xvZ2llcyBHbWJIIHByb2R1Y3RzIChodHRwOi8vd3d3LmFjZy5kZS8pLgotICogU3VibWl0dGVkIGJ5IGFudG9uIC1hdC0gZ290bzEwIC1kb3QtIG9yZy4KLSAqLwotI2RlZmluZSBGVERJX0FDR19IRkRVQUxfUElECQkweEREMjAJLyogSEYgRHVhbCBJU08gUmVhZGVyIChSRklEKSAqLwotCi0vKgotICogWW9zdCBFbmdpbmVlcmluZywgSW5jLiBwcm9kdWN0cyAod3d3Lnlvc3RlbmdpbmVlcmluZy5jb20pLgotICogUElEIDB4RTA1MCBzdWJtaXR0ZWQgYnkgQWFyb24gUHJvc2UuCi0gKi8KLSNkZWZpbmUgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQJMHhFMDUwCS8qIFlFSSBTZXJ2b0NlbnRlcjMuMSBVU0IgKi8KLQotLyoKLSAqIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzCi0gKi8KLSNkZWZpbmUgRlRESV9USE9STEFCU19QSUQJCTB4ZmFmMCAvKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycyAqLwotCi0vKgotICogVGVzdG8gcHJvZHVjdHMgKGh0dHA6Ly93d3cudGVzdG8uY29tLykKLSAqIFN1Ym1pdHRlZCBieSBDb2xpbiBMZXJveQotICovCi0jZGVmaW5lIFRFU1RPX1ZJRAkJCTB4MTI4RAotI2RlZmluZSBURVNUT19VU0JfSU5URVJGQUNFX1BJRAkJMHgwMDAxCi0KLS8qCi0gKiBHYW1tYSBTY291dCAoaHR0cDovL2dhbW1hLXNjb3V0LmNvbS8pLiBTdWJtaXR0ZWQgYnkgcnNjQHJ1bnR1eC5jb20uCi0gKi8KLSNkZWZpbmUgRlRESV9HQU1NQV9TQ09VVF9QSUQJCTB4RDY3OAkvKiBHYW1tYSBTY291dCBvbmxpbmUgKi8KLQotLyoKLSAqIFRhY3RyaXggT3BlblBvcnQgKEVDVSkgZGV2aWNlcy4KLSAqIE9wZW5Qb3J0IDEuM00gc3VibWl0dGVkIGJ5IERvbm91ciBTaXplbW9yZS4KLSAqIE9wZW5Qb3J0IDEuM1MgYW5kIDEuM1Ugc3VibWl0dGVkIGJ5IElhbiBBYmJvdHQuCi0gKi8KLSNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzTV9QSUQJMHhDQzQ4CS8qIE9wZW5Qb3J0IDEuMyBNaXRzdWJpc2hpICovCi0jZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1NfUElECTB4Q0M0OQkvKiBPcGVuUG9ydCAxLjMgU3ViYXJ1ICovCi0jZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1VfUElECTB4Q0M0QQkvKiBPcGVuUG9ydCAxLjMgVW5pdmVyc2FsICovCi0KLS8qCi0gKiBUZWxsZHVzIFRlY2hub2xvZ2llcwotICovCi0jZGVmaW5lIFRFTExEVVNfVklECQkJMHgxNzgxCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBURUxMRFVTX1RFTExTVElDS19QSUQJCTB4MEMzMAkvKiBSRiBjb250cm9sIGRvbmdsZSA0MzMgTUh6IHVzaW5nIEZUMjMyUkwgKi8KLQotLyoKLSAqIElCUyBlbGVrdHJvbmlrIHByb2R1Y3QgaWRzCi0gKiBTdWJtaXR0ZWQgYnkgVGhvbWFzIFNjaGxldXNlbmVyCi0gKi8KLSNkZWZpbmUgRlRESV9JQlNfVVM0ODVfUElECTB4ZmYzOCAgLyogSUJTIFVTNDg1IChVU0I8LS0+UlM0MjIvNDg1IGludGVyZmFjZSkgKi8KLSNkZWZpbmUgRlRESV9JQlNfUElDUFJPX1BJRAkweGZmMzkgIC8qIElCUyBQSUMtUHJvZ3JhbW1lciAqLwotI2RlZmluZSBGVERJX0lCU19QQ01DSUFfUElECTB4ZmYzYSAgLyogSUJTIENhcmQgcmVhZGVyIGZvciBQQ01DSUEgU1JBTS1jYXJkcyAqLwotI2RlZmluZSBGVERJX0lCU19QSzFfUElECTB4ZmYzYiAgLyogSUJTIFBLMSAtIFBhcnRpY2VsIGNvdW50ZXIgKi8KLSNkZWZpbmUgRlRESV9JQlNfUlMyMzJNT05fUElECTB4ZmYzYyAgLyogSUJTIFJTMjMyIC0gTW9uaXRvciAqLwotI2RlZmluZSBGVERJX0lCU19BUFA3MF9QSUQJMHhmZjNkICAvKiBBUFAgNzAgKGR1c3QgbW9uaXRvcmluZyBzeXN0ZW0pICovCi0jZGVmaW5lIEZURElfSUJTX1BFRE9fUElECTB4ZmYzZSAgLyogSUJTIFBFRE8tTW9kZW0gKFJGIG1vZGVtIDg2OC4zNSBNSHopICovCi0jZGVmaW5lIEZURElfSUJTX1BST0RfUElECTB4ZmYzZiAgLyogZnV0dXJlIGRldmljZSAqLwotCi0vKgotICogIE1heFN0cmVhbSBkZXZpY2VzCXd3dy5tYXhzdHJlYW0ubmV0Ci0gKi8KLSNkZWZpbmUgRlRESV9NQVhTVFJFQU1fUElECTB4RUUxOAkvKiBYYmVlIFBLRy1VIE1vZHVsZSAqLwotCi0vKiBPbGltZXggKi8KLSNkZWZpbmUgT0xJTUVYX1ZJRAkJCTB4MTVCQQotI2RlZmluZSBPTElNRVhfQVJNX1VTQl9PQ0RfUElECQkweDAwMDMKLQotLyogTHVtaW5hcnkgTWljcm8gU3RlbGxhcmlzIEJvYXJkcywgVklEID0gRlRESV9WSUQgKi8KLS8qIEZUREkgMjMzMkMgRHVhbCBjaGFubmVsIGRldmljZSwgc2lkZSBBPTI0NSBGSUZPIChKVEFHKSwgU2lkZSBCPVJTMjMyIFVBUlQgKi8KLSNkZWZpbmUgTE1JX0xNM1NfREVWRUxfQk9BUkRfUElECTB4YmNkOAotI2RlZmluZSBMTUlfTE0zU19FVkFMX0JPQVJEX1BJRAkJMHhiY2Q5Ci0KLS8qIHd3dy5lbHN0ZXJlbGVjdHJpY2l0eS5jb20gRWxzdGVyIFVuaWNvbSBJSUkgT3B0aWNhbCBQcm9iZSAqLwotI2RlZmluZSBGVERJX0VMU1RFUl9VTklDT01fUElECQkweEU3MDAgLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogVGhlIE1vYmlsaXR5IExhYiAoVE1MKQotICogU3VibWl0dGVkIGJ5IFBpZXJyZSBDYXN0ZWxsYQotICovCi0jZGVmaW5lIFRNTF9WSUQJCQkweDFCOTEJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFRNTF9VU0JfU0VSSUFMX1BJRAkweDAwNjQJLyogVVNCIC0gU2VyaWFsIENvbnZlcnRlciAqLwotCi0vKiBQcm9wb3ggZGV2aWNlcyAqLwotI2RlZmluZSBGVERJX1BST1BPWF9KVEFHQ0FCTEVJSV9QSUQJMHhENzM4Ci0KLS8qIFJpZyBFeHBlcnQgVWtyYWluZSBkZXZpY2VzICovCi0jZGVmaW5lIEZURElfUkVVX1RJTllfUElECQkweEVEMjIJLyogUmlnRXhwZXJ0IFRpbnkgKi8KLQotLyogRG9taW50ZWxsIHByb2R1Y3RzICBodHRwOi8vd3d3LmRvbWludGVsbC5jb20gKi8KLSNkZWZpbmUgRlRESV9ET01JTlRFTExfREdRR19QSUQJMHhFRjUwCS8qIE1hc3RlciAqLwotI2RlZmluZSBGVERJX0RPTUlOVEVMTF9EVVNCX1BJRAkweEVGNTEJLyogRFVTQjAxIG1vZHVsZSAqLwotCi0vKiBBbHRpLTIgcHJvZHVjdHMgIGh0dHA6Ly93d3cuYWx0aS0yLmNvbSAqLwotI2RlZmluZSBBTFRJMl9WSUQJMHgxQkM5Ci0jZGVmaW5lIEFMVEkyX04zX1BJRAkweDYwMDEJLyogTmVwdHVuZSAzICovCi0KIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpAQCAtOTEwLDg2ICs0MCw2IEBACiAjZGVmaW5lIElOVEVSRkFDRV9DCQkzCiAjZGVmaW5lIElOVEVSRkFDRV9ECQk0CiAKLS8qCi0gKiBGSUMgLyBPcGVuTW9rbywgSW5jLiBodHRwOi8vd2lraS5vcGVubW9rby5vcmcvd2lraS9OZW8xOTczX0RlYnVnX0JvYXJkX3YzCi0gKiBTdWJtaXR0ZWQgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG9wZW5tb2tvLm9yZz4KLSAqLwotI2RlZmluZQlGSUNfVklECQkJMHgxNDU3Ci0jZGVmaW5lCUZJQ19ORU8xOTczX0RFQlVHX1BJRAkweDUxMTgKLQotLyoKLSAqIFJBVE9DIFJFWC1VU0I2MEYKLSAqLwotI2RlZmluZSBSQVRPQ19WRU5ET1JfSUQJCTB4MDU4NAotI2RlZmluZSBSQVRPQ19QUk9EVUNUX0lEX1VTQjYwRgkweGIwMjAKLQotLyoKLSAqIERJRUJPTEQgQkNTIFNFOTIzCi0gKi8KLSNkZWZpbmUgRElFQk9MRF9CQ1NfU0U5MjNfUElECTB4ZmI5OQotCi0vKgotICogQXRtZWwgU1RLNTQxCi0gKi8KLSNkZWZpbmUgQVRNRUxfVklECQkweDAzZWIgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNUSzU0MV9QSUQJCTB4MjEwOSAvKiBaaWdiZWUgQ29udHJvbGxlciAqLwotCi0vKgotICogRHJlc2RlbiBFbGVrdHJvbmljIFNlbnNvciBUZXJtaW5hbCBCb2FyZAotICovCi0jZGVmaW5lIERFX1ZJRAkJCTB4MWNmMSAvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgU1RCX1BJRAkJCTB4MDAwMSAvKiBTZW5zb3IgVGVybWluYWwgQm9hcmQgKi8KLSNkZWZpbmUgV0hUX1BJRAkJCTB4MDAwNCAvKiBXaXJlbGVzcyBIYW5kaGVsZCBUZXJtaW5hbCAqLwotCi0vKgotICogQmxhY2tmaW4gZ25JQ0UgSlRBRwotICogaHR0cDovL2RvY3MuYmxhY2tmaW4udWNsaW51eC5vcmcvZG9rdS5waHA/aWQ9aHc6anRhZzpnbmljZQotICovCi0jZGVmaW5lIEFESV9WSUQgCQkweDA0NTYKLSNkZWZpbmUgQURJX0dOSUNFX1BJRCAJCTB4RjAwMAotI2RlZmluZSBBRElfR05JQ0VQTFVTX1BJRCAJMHhGMDAxCi0KLS8qCi0gKiBKRVRJIFNQRUNUUk9NRVRFUiBTUEVDQk9TIDEyMDEKLSAqIGh0dHA6Ly93d3cuamV0aS5jb20vcHJvZHVjdHMvc3lzL3NjYi9zY2IxMjAxLnBocAotICovCi0jZGVmaW5lIEpFVElfVklECQkweDBjNmMKLSNkZWZpbmUgSkVUSV9TUEMxMjAxX1BJRAkweDA0YjIKLQotLyoKLSAqIE1hcnZlbGwgU2hlZXZhUGx1ZwotICovCi0jZGVmaW5lIE1BUlZFTExfVklECQkweDllODgKLSNkZWZpbmUgTUFSVkVMTF9TSEVFVkFQTFVHX1BJRAkweDllOGYKLQotI2RlZmluZSBGVERJX1RVUlRFTElaRVJfUElECTB4QkRDOCAvKiBKVEFHL1JTLTIzMiBhZGFwdGVyIGJ5IGVnbml0ZSBHbUJIICovCi0KLS8qCi0gKiBHTiBPdG9tZXRyaWNzIChodHRwOi8vd3d3Lm90b21ldHJpY3MuY29tKQotICogU3VibWl0dGVkIGJ5IFZpbGxlIFN1bmRiZXJnLgotICovCi0jZGVmaW5lIEdOX09UT01FVFJJQ1NfVklECTB4MGMzMwkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgQVVSSUNBTF9VU0JfUElECQkweDAwMTAJLyogQXVyaWNhbCBVU0IgQXVkaW9tZXRlciAqLwotCi0vKgotICogQmF5ZXIgQXNjZW5zaWEgQ29udG91ciBibG9vZCBnbHVjb3NlIG1ldGVyIFVTQi1jb252ZXJ0ZXIgY2FibGUuCi0gKiBodHRwOi8vd2luZ2x1Y29mYWN0cy5jb20vY2FibGVzLwotICovCi0jZGVmaW5lIEJBWUVSX1ZJRCAgICAgICAgICAgICAgICAgICAgICAweDFBNzkKLSNkZWZpbmUgQkFZRVJfQ09OVE9VUl9DQUJMRV9QSUQgICAgICAgIDB4NjAwMQotCi0vKgotICogTWFydmVsbCBPcGVuUkQgQmFzZSwgQ2xpZW50Ci0gKiBodHRwOi8vd3d3Lm9wZW4tcmQub3JnCi0gKiBPcGVuUkQgQmFzZSwgQ2xpZW50IHVzZSBWSUQgMHgwNDAzCi0gKi8KLSNkZWZpbmUgTUFSVkVMTF9PUEVOUkRfUElECTB4OWU5MAotCi0vKgotICogSGFtZWcgSE84MjAgYW5kIEhPODcwIGludGVyZmFjZSAodXNpbmcgVklEIDB4MDQwMykKLSAqLwotI2RlZmluZSAgICAgICAgSEFNRUdfSE84MjBfUElEICAgICAgICAgMHhlZDc0Ci0jZGVmaW5lICAgICAgICBIQU1FR19ITzg3MF9QSUQgICAgICAgICAweGVkNzEKIAogLyoKICAqICAgQm1SZXF1ZXN0VHlwZTogIDExMDAgMDAwMGIKQEAgLTE1MDQsNCArNTU0LDMgQEAKICAqIEIyLi43CUxlbmd0aCBvZiBtZXNzYWdlIC0gKG5vdCBpbmNsdWRpbmcgQnl0ZSAwKQogICoKICAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5MmI0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApAQCAtMCwwICsxLDk4NiBAQAorLyoKKyAqIHZlbmRvci9wcm9kdWN0IElEcyAoVklEL1BJRCkgb2YgZGV2aWNlcyB1c2luZyBGVERJIFVTQiBzZXJpYWwgY29udmVydGVycy4KKyAqIFBsZWFzZSBrZWVwIG51bWVyaWNhbGx5IHNvcnRlZCB3aXRoaW4gaW5kaXZpZHVhbCBhcmVhcywgdGhhbmtzIQorICoKKyAqIFBoaWxpcHAgR/xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCisgKiBmcm9tIFJ1ZG9sZiBHdWdsZXIKKyAqCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiBkZXZpY2VzIHVzaW5nIEZUREkgVklEICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVERJX1ZJRAkweDA0MDMJLyogVmVuZG9yIElkICovCisKKworLyoqKiAib3JpZ2luYWwiIEZUREkgZGV2aWNlIFBJRHMgKioqLworCisjZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCisjZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV80MjMySF9QSUQgMHg2MDExIC8qIFF1YWQgY2hhbm5lbCBoaS1zcGVlZCBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9TSU9fUElECTB4ODM3MgkvKiBQcm9kdWN0IElkIFNJTyBhcHBsaWNhdGlvbiBvZiA4VTEwMEFYICAqLworI2RlZmluZSBGVERJXzIzMlJMX1BJRCAgMHhGQkZBICAvKiBQcm9kdWN0IElEIGZvciBGVDIzMlJMICovCisKKworLyoqKiB0aGlyZC1wYXJ0eSBQSURzICh1c2luZyBGVERJX1ZJRCkgKioqLworCisvKgorICogTWFydmVsbCBPcGVuUkQgQmFzZSwgQ2xpZW50CisgKiBodHRwOi8vd3d3Lm9wZW4tcmQub3JnCisgKiBPcGVuUkQgQmFzZSwgQ2xpZW50IHVzZSBWSUQgMHgwNDAzCisgKi8KKyNkZWZpbmUgTUFSVkVMTF9PUEVOUkRfUElECTB4OWU5MAorCisvKiB3d3cuY2FuZGFwdGVyLmNvbSBFd2VydCBFbmVyZ3kgU3lzdGVtcyBDQU5kYXB0ZXIgZGV2aWNlICovCisjZGVmaW5lIEZURElfQ0FOREFQVEVSX1BJRCAweDlGODAgLyogUHJvZHVjdCBJZCAqLworCisvKiBPT0NEbGluayBieSBKb2VybiBLYWlwZiA8am9lcm5rQHdlYi5kZT4KKyAqIChodHRwOi8vd3d3LmpvZXJub25saW5lLmRlL2R3L2Rva3UucGhwP2lkPXN0YXJ0JmlkeD1wcm9qZWN0czpvb2NkbGluaykgKi8KKyNkZWZpbmUgRlRESV9PT0NETElOS19QSUQJMHhiYWY4CS8qIEFtb250ZWMgSlRBR2tleSAqLworCisvKiBMdW1pbmFyeSBNaWNybyBTdGVsbGFyaXMgQm9hcmRzLCBWSUQgPSBGVERJX1ZJRCAqLworLyogRlRESSAyMzMyQyBEdWFsIGNoYW5uZWwgZGV2aWNlLCBzaWRlIEE9MjQ1IEZJRk8gKEpUQUcpLCBTaWRlIEI9UlMyMzIgVUFSVCAqLworI2RlZmluZSBMTUlfTE0zU19ERVZFTF9CT0FSRF9QSUQJMHhiY2Q4CisjZGVmaW5lIExNSV9MTTNTX0VWQUxfQk9BUkRfUElECQkweGJjZDkKKworI2RlZmluZSBGVERJX1RVUlRFTElaRVJfUElECTB4QkRDOCAvKiBKVEFHL1JTLTIzMiBhZGFwdGVyIGJ5IGVnbml0ZSBHbUJIICovCisKKy8qIE9wZW5EQ0MgKHd3dy5vcGVuZGNjLmRlKSBwcm9kdWN0IGlkICovCisjZGVmaW5lIEZURElfT1BFTkRDQ19QSUQJMHhCRkQ4CisjZGVmaW5lIEZURElfT1BFTkRDQ19TTklGRkVSX1BJRAkweEJGRDkKKyNkZWZpbmUgRlRESV9PUEVORENDX1RIUk9UVExFX1BJRAkweEJGREEKKyNkZWZpbmUgRlRESV9PUEVORENDX0dBVEVXQVlfUElECTB4QkZEQgorCisvKgorICogUlItQ2lyS2l0cyBMb2NvQnVmZmVyIFVTQiAoaHR0cDovL3d3dy5yci1jaXJraXRzLmNvbSkKKyAqLworI2RlZmluZSBGVERJX1JSQ0lSS0lUU19MT0NPQlVGRkVSX1BJRAkweGM3ZDAJLyogTG9jb0J1ZmZlciBVU0IgKi8KKworLyogRE1YNEFMTCBETVggSW50ZXJmYWNlcyAqLworI2RlZmluZSBGVERJX0RNWDRBTEwgMHhDODUwCisKKy8qCisgKiBBU0suZnIgZGV2aWNlcworICovCisjZGVmaW5lIEZURElfQVNLX1JEUjQwMF9QSUQJMHhDOTkxCS8qIEFTSyBSRFIgNDAwIHNlcmllcyBjYXJkIHJlYWRlciAqLworCisvKiB3d3cuc3RhcnRpbmctcG9pbnQtc3lzdGVtcy5jb20gtUNoYW1lbGVvbiBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9NSUNST19DSEFNRUxFT05fUElECTB4Q0FBMAkvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBUYWN0cml4IE9wZW5Qb3J0IChFQ1UpIGRldmljZXMuCisgKiBPcGVuUG9ydCAxLjNNIHN1Ym1pdHRlZCBieSBEb25vdXIgU2l6ZW1vcmUuCisgKiBPcGVuUG9ydCAxLjNTIGFuZCAxLjNVIHN1Ym1pdHRlZCBieSBJYW4gQWJib3R0LgorICovCisjZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM01fUElECTB4Q0M0OAkvKiBPcGVuUG9ydCAxLjMgTWl0c3ViaXNoaSAqLworI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTX1BJRAkweENDNDkJLyogT3BlblBvcnQgMS4zIFN1YmFydSAqLworI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNVX1BJRAkweENDNEEJLyogT3BlblBvcnQgMS4zIFVuaXZlcnNhbCAqLworCisvKiBTQ1MgSEYgUmFkaW8gTW9kZW1zIFBJRCdzIChodHRwOi8vd3d3LnNjcy1wdGMuY29tKSAqLworLyogdGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMF9QSUQgMHhEMDEwICAgIC8qIFNDUyBQVEMtSUl1c2IgKi8KKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzFfUElEIDB4RDAxMSAgICAvKiBTQ1MgVHJhY2tlciAvIERTUCBUTkMgKi8KKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzJfUElEIDB4RDAxMgorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfM19QSUQgMHhEMDEzCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV80X1BJRCAweEQwMTQKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzVfUElEIDB4RDAxNQorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNl9QSUQgMHhEMDE2CisjZGVmaW5lIEZURElfU0NTX0RFVklDRV83X1BJRCAweEQwMTcKKworLyogaVBsdXMgZGV2aWNlICovCisjZGVmaW5lIEZURElfSVBMVVNfUElEIDB4RDA3MCAvKiBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfSVBMVVMyX1BJRCAweEQwNzEgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogR2FtbWEgU2NvdXQgKGh0dHA6Ly9nYW1tYS1zY291dC5jb20vKS4gU3VibWl0dGVkIGJ5IHJzY0BydW50dXguY29tLgorICovCisjZGVmaW5lIEZURElfR0FNTUFfU0NPVVRfUElECQkweEQ2NzgJLyogR2FtbWEgU2NvdXQgb25saW5lICovCisKKy8qIFByb3BveCBkZXZpY2VzICovCisjZGVmaW5lIEZURElfUFJPUE9YX0pUQUdDQUJMRUlJX1BJRAkweEQ3MzgKKworLyoKKyAqIFhzZW5zIFRlY2hub2xvZ2llcyBCViBwcm9kdWN0cyAoaHR0cDovL3d3dy54c2Vucy5jb20pLgorICovCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8wX1BJRAkweEQzODgKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzFfUElECTB4RDM4OQorI2RlZmluZSBYU0VOU19DT05WRVJURVJfMl9QSUQJMHhEMzhBCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8zX1BJRAkweEQzOEIKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzRfUElECTB4RDM4QworI2RlZmluZSBYU0VOU19DT05WRVJURVJfNV9QSUQJMHhEMzhECisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl82X1BJRAkweEQzOEUKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzdfUElECTB4RDM4RgorCisvKgorICogTkRJICh3d3cubmRpZ2l0YWwuY29tKSBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfTkRJX0hVQ19QSUQJCTB4REE3MAkvKiBOREkgSG9zdCBVU0IgQ29udmVydGVyICovCisjZGVmaW5lIEZURElfTkRJX1NQRUNUUkFfU0NVX1BJRAkweERBNzEJLyogTkRJIFNwZWN0cmEgU0NVICovCisjZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8yX1BJRAkJMHhEQTcyCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMyICovCisjZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8zX1BJRAkJMHhEQTczCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMzICovCisjZGVmaW5lIEZURElfTkRJX0FVUk9SQV9TQ1VfUElECQkweERBNzQJLyogTkRJIEF1cm9yYSBTQ1UgKi8KKworLyoKKyAqIFdlc3RyZXggSW50ZXJuYXRpb25hbCBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDb3J5IExlZQorICovCisjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF83NzdfUElECTB4REMwMAkvKiBNb2RlbCA3NzcgKi8KKyNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzg5MDBGX1BJRAkweERDMDEJLyogTW9kZWwgODkwMEYgKi8KKworLyoKKyAqIEFDRyBJZGVudGlmaWNhdGlvbiBUZWNobm9sb2dpZXMgR21iSCBwcm9kdWN0cyAoaHR0cDovL3d3dy5hY2cuZGUvKS4KKyAqIFN1Ym1pdHRlZCBieSBhbnRvbiAtYXQtIGdvdG8xMCAtZG90LSBvcmcuCisgKi8KKyNkZWZpbmUgRlRESV9BQ0dfSEZEVUFMX1BJRAkJMHhERDIwCS8qIEhGIER1YWwgSVNPIFJlYWRlciAoUkZJRCkgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBBcnRlbWlzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcworICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hcnRlbWlzY2NkLmNvLnVrLworICovCisjZGVmaW5lIEZURElfQVJURU1JU19QSUQJMHhERjI4CS8qIEFsbCBBcnRlbWlzIENhbWVyYXMgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBBVElLIEluc3RydW1lbnRzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcworICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hdGlrLWluc3RydW1lbnRzLmNvbS8KKyAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZfUElECTB4REYzMAkvKiBBVElLIEFUSy0xNiBHcmF5c2NhbGUgQ2FtZXJhICovCisjZGVmaW5lIEZURElfQVRJS19BVEsxNkNfUElECTB4REYzMgkvKiBBVElLIEFUSy0xNkMgQ29sb3VyIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZIUl9QSUQJMHhERjMxCS8qIEFUSUsgQVRLLTE2SFIgR3JheXNjYWxlIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZIUkNfUElECTB4REYzMwkvKiBBVElLIEFUSy0xNkhSQyBDb2xvdXIgQ2FtZXJhICovCisjZGVmaW5lIEZURElfQVRJS19BVEsxNklDX1BJRCAgIDB4REYzNSAgLyogQVRJSyBBVEstMTZJQyBHcmF5c2NhbGUgQ2FtZXJhICovCisKKy8qCisgKiBZb3N0IEVuZ2luZWVyaW5nLCBJbmMuIHByb2R1Y3RzICh3d3cueW9zdGVuZ2luZWVyaW5nLmNvbSkuCisgKiBQSUQgMHhFMDUwIHN1Ym1pdHRlZCBieSBBYXJvbiBQcm9zZS4KKyAqLworI2RlZmluZSBGVERJX1lFSV9TRVJWT0NFTlRFUjMxX1BJRAkweEUwNTAJLyogWUVJIFNlcnZvQ2VudGVyMy4xIFVTQiAqLworCisvKgorICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCisgKiBBbGwgb2YgdGhlc2UgZGV2aWNlcyB1c2UgRlRESSdzIHZlbmRvciBJRCAoMHgwNDAzKS4KKyAqCisgKiBUaGUgcHJldmlvdXNseSBpbmNsdWRlZCBQSUQgZm9yIHRoZSBVTyAxMDAgbW9kdWxlIHdhcyBpbmNvcnJlY3QuCisgKiBJbiBmYWN0LCB0aGF0IFBJRCB3YXMgZm9yIEVMVidzIFVSIDEwMCBVU0ItUlMyMzIgY29udmVydGVyICgweEZCNTgpLgorICoKKyAqIEFybWluIExhZXVnZXIgb3JpZ2luYWxseSBzZW50IHRoZSBQSUQgZm9yIHRoZSBVTSAxMDAgbW9kdWxlLgorICovCisjZGVmaW5lIEZURElfRUxWX0ZIWjEzMDBQQ19QSUQJMHhFMEU4CS8qIEZIWiAxMzAwIFBDICovCisjZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9IUzQ4NV9QSUQJMHhFMEVBCS8qIFVTQiB0byBSUy00ODUgYWRhcHRlciAqLworI2RlZmluZSBGVERJX0VMVl9FTTEwMTBQQ19QSUQJMHhFMEVGCS8qIEVuZ2VyeSBtb25pdG9yIEVNIDEwMTAgUEMgKi8KKyNkZWZpbmUgRlRESV9FTFZfQ1NJOF9QSUQJMHhFMEYwCS8qIENvbXB1dGVyLVNjaGFsdC1JbnRlcmZhY2UgKENTSSA4KSAqLworI2RlZmluZSBGVERJX0VMVl9FTTEwMDBETF9QSUQJMHhFMEYxCS8qIFBDLURhdGVubG9nZ2VyIGZ1ZXIgRW5lcmdpZW1vbml0b3IgKEVNIDEwMDAgREwpICovCisjZGVmaW5lIEZURElfRUxWX1BDSzEwMF9QSUQJMHhFMEYyCS8qIFBDLUthYmVsdGVzdGVyIChQQ0sgMTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9SRlA1MDBfUElECTB4RTBGMwkvKiBIRi1MZWlzdHVuZ3NtZXNzZXIgKFJGUCA1MDApICovCisjZGVmaW5lIEZURElfRUxWX0ZTMjBTSUdfUElECTB4RTBGNAkvKiBTaWduYWxnZWJlciAoRlMgMjAgU0lHKSAqLworI2RlZmluZSBGVERJX0VMVl9XUzMwMFBDX1BJRAkweEUwRjYJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgMzAwIFBDKSAqLworI2RlZmluZSBGVERJX1BISV9GSVNDT19QSUQgICAgICAweEU0MEIgIC8qIFBISSBGaXNjbyBVU0IgdG8gU2VyaWFsIGNhYmxlICovCisjZGVmaW5lIEZURElfRUxWX1VBRDhfUElECTB4RjA2OAkvKiBVU0ItQUQtV2FuZGxlciAoVUFEIDgpICovCisjZGVmaW5lIEZURElfRUxWX1VEQTdfUElECTB4RjA2OQkvKiBVU0ItREEtV2FuZGxlciAoVURBIDcpICovCisjZGVmaW5lIEZURElfRUxWX1VTSTJfUElECTB4RjA2QQkvKiBVU0ItU2Nocml0dG1vdG9yZW4tSW50ZXJmYWNlIChVU0kgMikgKi8KKyNkZWZpbmUgRlRESV9FTFZfVDExMDBfUElECTB4RjA2QgkvKiBUaGVybW9tZXRlciAoVCAxMTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9QQ0QyMDBfUElECTB4RjA2QwkvKiBQQy1EYXRlbmxvZ2dlciAoUENEIDIwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVUxBMjAwX1BJRAkweEYwNkQJLyogVVNCLUxDRC1BbnN0ZXVlcnVuZyAoVUxBIDIwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfQUxDODUwMF9QSUQJMHhGMDZFCS8qIEFMQyA4NTAwIEV4cGVydCAqLworI2RlZmluZSBGVERJX0VMVl9GSFoxMDAwUENfUElECTB4RjA2RgkvKiBGSFogMTAwMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9VTTEwMF9QSUQJMHhGQjVBCS8qIFVTQi1Nb2R1bCBVTSAxMDAgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU8xMDBfUElECTB4RkI1QgkvKiBVU0ItTW9kdWwgVU8gMTAwICovCisvKiBBZGRpdGlvbmFsIEVMViBQSURzIHRoYXQgZGVmYXVsdCB0byB1c2luZyB0aGUgRlRESSBEMlhYIGRyaXZlcnMgb24KKyAqIE1TIFdpbmRvd3MsIHJhdGhlciB0aGFuIHRoZSBGVERJIFZpcnR1YWwgQ29tIFBvcnQgZHJpdmVycy4KKyAqIE1heWJlIHRoZXNlIHdpbGwgYmUgZWFzaWVyIHRvIHVzZSB3aXRoIHRoZSBsaWJmdGRpL2xpYnVzYiB1c2VyLXNwYWNlCisgKiBkcml2ZXJzLCBvciBwb3NzaWJseSB0aGUgQ29tZWRpIGRyaXZlcnMgaW4gc29tZSBjYXNlcy4gKi8KKyNkZWZpbmUgRlRESV9FTFZfQ0xJNzAwMF9QSUQJMHhGQjU5CS8qIENvbXB1dGVyLUxpZ2h0LUludGVyZmFjZSAoQ0xJIDcwMDApICovCisjZGVmaW5lIEZURElfRUxWX1BQUzczMzBfUElECTB4RkI1QwkvKiBQcm9jZXNzb3ItUG93ZXItU3VwcGx5IChQUFMgNzMzMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVEZNMTAwX1BJRAkweEZCNUQJLyogVGVtcGVyYXJ0dXItRmV1Y2h0ZSBNZXNzZ2VyYWV0IChURk0gMTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VyaCAoVURGIDc3KSAqLworI2RlZmluZSBGVERJX0VMVl9VSU84OF9QSUQJMHhGQjVGCS8qIFVTQi1JL08gSW50ZXJmYWNlIChVSU8gODgpICovCisKKy8qCisgKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKKyAqLworCisjZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KKworLyoKKyAqIEFjdGl2ZSBSb2JvdHMgcHJvZHVjdCBpZHMuCisgKi8KKyNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCisKKy8qIFB5cmFtaWQgQ29tcHV0ZXIgR21iSCAqLworI2RlZmluZSBGVERJX1BZUkFNSURfUElECTB4RTZDOAkvKiBQeXJhbWlkIEFwcGxpYW5jZSBEaXNwbGF5ICovCisKKy8qIHd3dy5lbHN0ZXJlbGVjdHJpY2l0eS5jb20gRWxzdGVyIFVuaWNvbSBJSUkgT3B0aWNhbCBQcm9iZSAqLworI2RlZmluZSBGVERJX0VMU1RFUl9VTklDT01fUElECQkweEU3MDAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICisgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDhfUElEICAgIDB4RTgwOAorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5CisjZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEJfUElEICAgIDB4RTgwQgorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCisjZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEVfUElEICAgIDB4RTgwRQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCisjZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODg5X1BJRCAgICAweEU4ODkgIC8qIFVTQiBSUy0yMzIgT3B0b0JyaWRnZSAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCisjZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OENfUElEICAgIDB4RTg4QworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECisjZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEZfUElEICAgIDB4RTg4RgorCisvKgorICogRWNsbyAoaHR0cDovL3d3dy5lY2xvLnB0LykgcHJvZHVjdCBJRHMuCisgKiBQSUQgMHhFQTkwIHN1Ym1pdHRlZCBieSBNYXJ0aW4gR3JpbGwuCisgKi8KKyNkZWZpbmUgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQJMHhFQTkwCS8qIENPTSB0byAxLVdpcmUgVVNCIGFkYXB0b3IgKi8KKworLyogVE5DLVggVVNCLXRvLXBhY2tldC1yYWRpbyBhZGFwdGVyLCB2ZXJzaW9ucyBwcmlvciB0byAzLjAgKERMUCBtb2R1bGUpICovCisjZGVmaW5lIEZURElfVE5DX1hfUElECQkweEVCRTAKKworLyoKKyAqIFRlcmF0cm9uaWsgcHJvZHVjdCBpZHMuCisgKiBTdWJtaXR0ZWQgYnkgTy4gV/ZsZmVsc2NobmVpZGVyLgorICovCisjZGVmaW5lIEZURElfVEVSQVRST05JS19WQ1BfUElECSAweEVDODgJLyogVGVyYXRyb25payBkZXZpY2UgKHByZWZlcnJpbmcgVkNQIGRyaXZlciBvbiB3aW5kb3dzKSAqLworI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfRDJYWF9QSUQgMHhFQzg5CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIEQyWFggZHJpdmVyIG9uIHdpbmRvd3MpICovCisKKy8qIFJpZyBFeHBlcnQgVWtyYWluZSBkZXZpY2VzICovCisjZGVmaW5lIEZURElfUkVVX1RJTllfUElECQkweEVEMjIJLyogUmlnRXhwZXJ0IFRpbnkgKi8KKworLyoKKyAqIEhhbWVnIEhPODIwIGFuZCBITzg3MCBpbnRlcmZhY2UgKHVzaW5nIFZJRCAweDA0MDMpCisgKi8KKyNkZWZpbmUgICAgICAgIEhBTUVHX0hPODIwX1BJRCAgICAgICAgIDB4ZWQ3NAorI2RlZmluZSAgICAgICAgSEFNRUdfSE84NzBfUElEICAgICAgICAgMHhlZDcxCisKKy8qCisgKiAgTWF4U3RyZWFtIGRldmljZXMJd3d3Lm1heHN0cmVhbS5uZXQKKyAqLworI2RlZmluZSBGVERJX01BWFNUUkVBTV9QSUQJMHhFRTE4CS8qIFhiZWUgUEtHLVUgTW9kdWxlICovCisKKy8qCisgKiBtaWNyb0hBTSBwcm9kdWN0IElEcyAoaHR0cDovL3d3dy5taWNyb2hhbS5jb20pLgorICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPgorICogYW5kIE1pa2UgU3R1ZGVyIChLNkVFUCkgPGs2ZWVwQGhhbXNvZnR3YXJlLm9yZz4uCisgKiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4gYWRkZWQgYSBmZXcgbW9yZSBmcm9tIHRoZSBkcml2ZXIgSU5GIGZpbGUuCisgKi8KKyNkZWZpbmUgRlRESV9NSEFNX0tXX1BJRCAweEVFRTgJCS8qIFVTQi1LVyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX1lTX1BJRCAweEVFRTkJCS8qIFVTQi1ZUyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX1k4X1BJRCAweEVFRUIJCS8qIFVTQi1ZOCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX0lDX1BJRCAweEVFRUMJCS8qIFVTQi1JQyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX0RCOV9QSUQgMHhFRUVECS8qIFVTQi1EQjkgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9SUzIzMl9QSUQgMHhFRUVFCS8qIFVTQi1SUzIzMiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX1k5X1BJRCAweEVFRUYJCS8qIFVTQi1ZOSBpbnRlcmZhY2UgKi8KKworLyogRG9taW50ZWxsIHByb2R1Y3RzICBodHRwOi8vd3d3LmRvbWludGVsbC5jb20gKi8KKyNkZWZpbmUgRlRESV9ET01JTlRFTExfREdRR19QSUQJMHhFRjUwCS8qIE1hc3RlciAqLworI2RlZmluZSBGVERJX0RPTUlOVEVMTF9EVVNCX1BJRAkweEVGNTEJLyogRFVTQjAxIG1vZHVsZSAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFBlcmxlIFN5c3RlbXMKKyAqIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKKyAqLworI2RlZmluZSBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQgMHhGMEMwCS8qIFBlcmxlIFVsdHJhUG9ydCBQcm9kdWN0IElkICovCisKKy8qIFNwcm9nIElJIChBbmRyZXcgQ3Jvc2xhbmQncyBTcHJvZ0lJIERDQyBpbnRlcmZhY2UpICovCisjZGVmaW5lIEZURElfU1BST0dfSUkJCTB4RjBDOAorCisvKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KKyNkZWZpbmUgRlRESV9QSUVHUk9VUF9QSUQJMHhGMjA4CS8qIFByb2R1Y3QgSWQgKi8KKworLyogQUNUIFNvbHV0aW9ucyBIb21lUHJvIFpXYXZlIGludGVyZmFjZQorICAgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCisjZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAorCisvKgorICogNE4tR0FMQVhZLkRFIFBJRHMgZm9yIENBTi1VU0IsIFVTQi1SUzIzMiwgVVNCLVJTNDIyLCBVU0ItUlM0ODUsCisgKiBVU0ItVFRZIGFjdGl2LCBVU0ItVFRZIHBhc3Npdi4gIFNvbWUgUElEcyBhcmUgdXNlZCBieSBzZXZlcmFsIGRldmljZXMKKyAqIGFuZCBJJ20gbm90IGVudGlyZWx5IHN1cmUgd2hpY2ggYXJlIHVzZWQgYnkgd2hpY2guCisgKi8KKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCisjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzJfUElECTB4RjNDMQorCisvKgorICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCisjZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworCisvKgorICogT2NlYW5pYyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfT0NFQU5JQ19QSUQJMHhGNDYwICAvKiBPY2VhbmljIGRpdmUgaW5zdHJ1bWVudCAqLworCisvKgorICogU1VVTlRPIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgRlRESV9TVVVOVE9fU1BPUlRTX1BJRAkweEY2ODAJLyogU3V1bnRvIFNwb3J0cyBpbnN0cnVtZW50ICovCisKKy8qIFVTQi1VSVJUIC0gQW4gaW5mcmFyZWQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIHVzaW5nIHRoZSA4VTIzMkFNIGNoaXAgKi8KKy8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLworI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLworCisvKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0KKyAqIHRoZSBGVDIzMkJNIGlzIHVzZWQgaW4gYW4gaW4tY2lyY3VpdC1kZWJ1Z2dlciB1bml0IGZvciBQSUMxNidzL1BJQzE4J3MgKi8KKyNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwCisjZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMQorI2RlZmluZSBGVERJX0NDU01BQ0hYXzJfUElEICAgICAweEY5RDIKKyNkZWZpbmUgRlRESV9DQ1NMT0FEX05fR09fM19QSUQgMHhGOUQzCisjZGVmaW5lIEZURElfQ0NTSUNEVTY0XzRfUElEICAgIDB4RjlENAorI2RlZmluZSBGVERJX0NDU1BSSU1FOF81X1BJRCAgICAweEY5RDUKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheXMsCisgKiB3aGljaCBhcmUgdGhlIEZUMjMyQk0gKCBzaW1pbGFyIHRvIHRoZSA4VTIzMkFNICkKKyAqLworI2RlZmluZSBGVERJX01UWE9SQl8wX1BJRCAgICAgIDB4RkEwMCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8xX1BJRCAgICAgIDB4RkEwMSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8yX1BJRCAgICAgIDB4RkEwMiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8zX1BJRCAgICAgIDB4RkEwMyAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl80X1BJRCAgICAgIDB4RkEwNCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl81X1BJRCAgICAgIDB4RkEwNSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl82X1BJRCAgICAgIDB4RkEwNiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworCisvKgorICogSG9tZSBFbGVjdHJvbmljcyAod3d3LmhvbWUtZWxlY3Ryby5jb20pIFVTQiBnYWRnZXRzCisgKi8KKyNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuc2NlaXZlciAqLworCisvKiBJbnNpZGUgQWNjZXNzbyBjb250YWN0bGVzcyByZWFkZXIgKGh0dHA6Ly93d3cuaW5zaWRlZnIuY29tKSAqLworI2RlZmluZSBJTlNJREVfQUNDRVNTTwkJMHhGQUQwCisKKy8qCisgKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycworICovCisjZGVmaW5lIEZURElfVEhPUkxBQlNfUElECQkweGZhZjAgLyogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMgKi8KKworLyoKKyAqIFByb3RlZ28gcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMwkweEZDNzIJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworCisvKgorICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCisgKi8KKyNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyCisKKy8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLworI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBSTSBNaWNoYWVsaWRlcyBDQU52aWV3IFVTQiAoaHR0cDovL3d3dy5ybWNhbi5jb20pIChGVERJX1ZJRCkKKyAqIENBTiBmaWVsZGJ1cyBpbnRlcmZhY2UgYWRhcHRlciwgYWRkZWQgYnkgcG9ydCBHbWJIIHd3dy5wb3J0LmRlKQorICogSWFuIEFiYm90dCBjaGFuZ2VkIHRoZSBtYWNybyBuYW1lcyBmb3IgY29uc2lzdGVuY3kuCisgKi8KKyNkZWZpbmUgRlRESV9STV9DQU5WSUVXX1BJRAkweGZkNjAJLyogUHJvZHVjdCBJZCAqLworLyogd3d3LnRob3VnaHR0ZWNobm9sb2d5LmNvbS8gVFQtVVNCIHByb3ZpZGUgd2l0aCBwcm9jb21wIHVzZSBmdGRpX3NpbyAqLworI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLworCisjZGVmaW5lIEZURElfVVNCWF83MDdfUElEIDB4Rjg1NwkvKiBBRFNUZWNoIElSIEJsYXN0ZXIgVVNCWC03MDcgKEZURElfVklEKSAqLworCisjZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCisKKy8qCisgKiBQQ0RKIHVzZSBmdGRpIGJhc2VkIGRqLWNvbnRyb2xsZXJzLiBUaGUgZm9sbG93aW5nIFBJRCBpcworICogZm9yIHRoZWlyIERBQy0yIGRldmljZSBodHRwOi8vd3d3LnBjZGpoYXJkd2FyZS5jb20vREFDMi5hc3AKKyAqICh0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpLCBQSUQgc2VudCBieSBXb3V0ZXIgUGFlc2VuKQorICovCisjZGVmaW5lIEZURElfUENESl9EQUMyX1BJRCAweEZBODgKKworI2RlZmluZSBGVERJX1IyMDAwS1VfVFJVRV9STkcJMHhGQjgwICAvKiBSMjAwMEtVIFRSVUUgUk5HIChGVERJX1ZJRCkgKi8KKworLyoKKyAqIERJRUJPTEQgQkNTIFNFOTIzIChGVERJX1ZJRCkKKyAqLworI2RlZmluZSBESUVCT0xEX0JDU19TRTkyM19QSUQJMHhmYjk5CisKKy8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMKKyAqIC0gdGhhbnggZm9yIHByb3ZpZGluZyBmcmVlIGRldmljZXMgZm9yIGV2YWx1YXRpb24gIQorICogdGhleSB1c2UgdGhlIGZ0ZGkgY2hpcHNldCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UKKyAqIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lCisgKi8KKyNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzRfUElEIDB4RkMwOQkvKiA2MzQ6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl81NDdfUElEIDB4RkMwQQkvKiA1NDc6IFR3byBsaW5lIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzNfUElEIDB4RkMwQgkvKiA2MzM6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgd2l0aCBLZXlzICovCisjZGVmaW5lIEZURElfWEZfNjMxX1BJRCAweEZDMEMJLyogNjMxOiAyMHgyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM1X1BJRCAweEZDMEQJLyogNjM1OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjQwX1BJRCAweEZDMEUJLyogNjQwOiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjQyX1BJRCAweEZDMEYJLyogNjQyOiBUd28gbGluZSBEaXNwbGF5ICovCisKKy8qCisgKiBWaWRlbyBOZXR3b3JrcyBMaW1pdGVkIC8gSG9tZWNob2ljZSBpbiB0aGUgVUsgdXNlIGFuIGZ0ZGktYmFzZWQgZGV2aWNlCisgKiBmb3IgdGhlaXIgMU1iIGJyb2FkYmFuZCBpbnRlcm5ldCBzZXJ2aWNlLiAgVGhlIGZvbGxvd2luZyBQSUQgaXMgZXhoaWJpdGVkCisgKiBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKQorICovCisjZGVmaW5lIEZURElfVk5IQ1BDVVNCX0RfUElEIDB4ZmUzOCAvKiBQcm9kdWN0IElkICovCisKKy8qIEFscGhhTWljcm8gQ29tcG9uZW50cyBBTUMtMjMyVVNCMDEgZGV2aWNlIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9BTUMyMzJfUElEIDB4RkYwMCAvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBJQlMgZWxla3Ryb25payBwcm9kdWN0IGlkcyAoRlRESV9WSUQpCisgKiBTdWJtaXR0ZWQgYnkgVGhvbWFzIFNjaGxldXNlbmVyCisgKi8KKyNkZWZpbmUgRlRESV9JQlNfVVM0ODVfUElECTB4ZmYzOCAgLyogSUJTIFVTNDg1IChVU0I8LS0+UlM0MjIvNDg1IGludGVyZmFjZSkgKi8KKyNkZWZpbmUgRlRESV9JQlNfUElDUFJPX1BJRAkweGZmMzkgIC8qIElCUyBQSUMtUHJvZ3JhbW1lciAqLworI2RlZmluZSBGVERJX0lCU19QQ01DSUFfUElECTB4ZmYzYSAgLyogSUJTIENhcmQgcmVhZGVyIGZvciBQQ01DSUEgU1JBTS1jYXJkcyAqLworI2RlZmluZSBGVERJX0lCU19QSzFfUElECTB4ZmYzYiAgLyogSUJTIFBLMSAtIFBhcnRpY2VsIGNvdW50ZXIgKi8KKyNkZWZpbmUgRlRESV9JQlNfUlMyMzJNT05fUElECTB4ZmYzYyAgLyogSUJTIFJTMjMyIC0gTW9uaXRvciAqLworI2RlZmluZSBGVERJX0lCU19BUFA3MF9QSUQJMHhmZjNkICAvKiBBUFAgNzAgKGR1c3QgbW9uaXRvcmluZyBzeXN0ZW0pICovCisjZGVmaW5lIEZURElfSUJTX1BFRE9fUElECTB4ZmYzZSAgLyogSUJTIFBFRE8tTW9kZW0gKFJGIG1vZGVtIDg2OC4zNSBNSHopICovCisjZGVmaW5lIEZURElfSUJTX1BST0RfUElECTB4ZmYzZiAgLyogZnV0dXJlIGRldmljZSAqLworLyogd3d3LmNhbnVzYi5jb20gTGF3aWNlbCBDQU5VU0IgZGV2aWNlIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9DQU5VU0JfUElEIDB4RkZBOCAvKiBQcm9kdWN0IElkICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogdGhpcmQtcGFydHkgVklEL1BJRCBjb21ib3MgKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKgorICogQXRtZWwgU1RLNTQxCisgKi8KKyNkZWZpbmUgQVRNRUxfVklECQkweDAzZWIgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFNUSzU0MV9QSUQJCTB4MjEwOSAvKiBaaWdiZWUgQ29udHJvbGxlciAqLworCisvKgorICogQmxhY2tmaW4gZ25JQ0UgSlRBRworICogaHR0cDovL2RvY3MuYmxhY2tmaW4udWNsaW51eC5vcmcvZG9rdS5waHA/aWQ9aHc6anRhZzpnbmljZQorICovCisjZGVmaW5lIEFESV9WSUQgCQkweDA0NTYKKyNkZWZpbmUgQURJX0dOSUNFX1BJRCAJCTB4RjAwMAorI2RlZmluZSBBRElfR05JQ0VQTFVTX1BJRCAJMHhGMDAxCisKKy8qCisgKiBSQVRPQyBSRVgtVVNCNjBGCisgKi8KKyNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKKyNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRF9VU0I2MEYJMHhiMDIwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgorICovCisjZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQkFOREJfVVNPVEw0X1BJRAkweEFDMDEJLyogVVNPVEw0IElzb2xhdGVkIFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTT1BUTDRfUElECTB4QUMxMQorI2RlZmluZSBCQU5EQl9VU1BUTDRfUElECTB4QUMxMgorI2RlZmluZSBCQU5EQl9VU085TUwyRFJfMl9QSUQJMHhBQzE2CisjZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl9QSUQJMHhBQzE3CisjZGVmaW5lIEJBTkRCX1VTT1BUTDREUjJfUElECTB4QUMxOAkvKiBVU09QVEw0Ui0yIDItcG9ydCBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTT1BUTDREUl9QSUQJMHhBQzE5CisjZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzJXX1BJRAkweEFDMjUKKyNkZWZpbmUgQkFOREJfNDg1VVNCOUZfNFdfUElECTB4QUMyNgorI2RlZmluZSBCQU5EQl8yMzJVU0I5TV9QSUQJMHhBQzI3CisjZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzJXX1BJRAkweEFDMzMKKyNkZWZpbmUgQkFOREJfNDg1VVNCVEJfNFdfUElECTB4QUMzNAorI2RlZmluZSBCQU5EQl9UVEw1VVNCOU1fUElECTB4QUM0OQorI2RlZmluZSBCQU5EQl9UVEwzVVNCOU1fUElECTB4QUM1MAorI2RlZmluZSBCQU5EQl9aWl9QUk9HMV9VU0JfUElECTB4QkEwMgorCisvKgorICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCisgKi8KKyNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKKyNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQorI2RlZmluZSBJTlRSRVBJRF9ORU9WSV9QSUQJMHgwNzAxCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSUQgVEVDSCAod3d3LmlkdC1uZXQuY29tKSBkZXZpY2VzCisgKi8KKyNkZWZpbmUgSURURUNIX1ZJRAkJMHgwQUNECS8qIElEIFRFQ0ggVmVuZG9yIElEICovCisjZGVmaW5lIElEVEVDSF9JRFQxMjIxVV9QSUQJMHgwMzAwCS8qIElEVDEyMjFVIFVTQiB0byBSUy0yMzIgYWRhcHRlciAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIE9tbmlkaXJlY3Rpb25hbCBDb250cm9sIFRlY2hub2xvZ3ksIEluYy4gZGV2aWNlcworICovCisjZGVmaW5lIE9DVF9WSUQJCQkweDBCMzkJLyogT0NUIHZlbmRvciBJRCAqLworLyogTm90ZTogT0NUIFVTMTAxIGlzIGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoTlopIFhINjM4MSAqLworLyogQWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChBdXMpIFhINjQ1MSAqLworLyogQWxzbyByZWJhZGdlZCBhcyBTSUlHIEluYy4gbW9kZWwgVVMyMzA4IGhhcmR3YXJlIHZlcnNpb24gMSAqLworI2RlZmluZSBPQ1RfVVMxMDFfUElECQkweDA0MjEJLyogT0NUIFVTMTAxIFVTQiB0byBSUy0yMzIgKi8KKworLyoKKyAqIEljb20gSUQtMSBkaWdpdGFsIHRyYW5zY2VpdmVyCisgKi8KKworI2RlZmluZSBJQ09NX0lEMV9WSUQgICAgICAgICAgICAweDBDMjYKKyNkZWZpbmUgSUNPTV9JRDFfUElEICAgICAgICAgICAgMHgwMDA0CisKKy8qCisgKiBHTiBPdG9tZXRyaWNzIChodHRwOi8vd3d3Lm90b21ldHJpY3MuY29tKQorICogU3VibWl0dGVkIGJ5IFZpbGxlIFN1bmRiZXJnLgorICovCisjZGVmaW5lIEdOX09UT01FVFJJQ1NfVklECTB4MGMzMwkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQVVSSUNBTF9VU0JfUElECQkweDAwMTAJLyogQXVyaWNhbCBVU0IgQXVkaW9tZXRlciAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFNlYWxldmVsIFNlYUxJTksrIGFkYXB0ZXJzLgorICogKE9yaWdpbmFsIGxpc3Qgc2VudCBieSBUdWFuIEhvYW5nLiAgSWFuIEFiYm90dCByZW5hbWVkIHRoZSBtYWNyb3MgYW5kCisgKiByZW1vdmVkIHNvbWUgUElEcyB0aGF0IGRvbid0IHNlZW0gdG8gbWF0Y2ggYW55IGV4aXN0aW5nIHByb2R1Y3RzLikKKyAqLworI2RlZmluZSBTRUFMRVZFTF9WSUQJCTB4MGM1MgkvKiBTZWFsZXZlbCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwMV9QSUQJMHgyMTAxCS8qIFNlYUxJTksrMjMyICgyMTAxLzIxMDUpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDJfUElECTB4MjEwMgkvKiBTZWFMSU5LKzQ4NSAoMjEwMikgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwM19QSUQJMHgyMTAzCS8qIFNlYUxJTksrMjMySSAoMjEwMykgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwNF9QSUQJMHgyMTA0CS8qIFNlYUxJTksrNDg1SSAoMjEwNCkgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwNl9QSUQJMHg5MDIwCS8qIFNlYUxJTksrNDIyICgyMTA2KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAxXzFfUElECTB4MjIxMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDJfMV9QSUQJMHgyMjEyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzJfUElECTB4MjIyMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwM18yX1BJRAkweDIyMjMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8xX1BJRAkweDI0MTEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzNfUElECTB4MjQzMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV80X1BJRAkweDI0NDEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzJfUElECTB4MjQyMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8zX1BJRAkweDI0MzIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzFfUElECTB4MjQxMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzJfUElECTB4MjQyMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzRfUElECTB4MjQ0MwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzFfUElECTBYMjgxMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfM19QSUQJMFgyODMxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzRfUElECTBYMjg0MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNl9QSUQJMFgyODYxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzdfUElECTBYMjg3MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfMV9QSUQJMFgyODEyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzJfUElECTBYMjgyMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNF9QSUQJMFgyODQyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzVfUElECTBYMjg1MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfN19QSUQJMFgyODcyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzhfUElECTBYMjg4MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDggKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18yX1BJRAkwWDI4MjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfM19QSUQJMFgyODMzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM181X1BJRAkwWDI4NTMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNl9QSUQJMFgyODYzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM184X1BJRAkwWDI4ODMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA4ICovCisKKy8qCisgKiBKRVRJIFNQRUNUUk9NRVRFUiBTUEVDQk9TIDEyMDEKKyAqIGh0dHA6Ly93d3cuamV0aS5jb20vcHJvZHVjdHMvc3lzL3NjYi9zY2IxMjAxLnBocAorICovCisjZGVmaW5lIEpFVElfVklECQkweDBjNmMKKyNkZWZpbmUgSkVUSV9TUEMxMjAxX1BJRAkweDA0YjIKKworLyoKKyAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKKyAqIEVsZWt0b3IgRWxlY3Ryb25pY3MgbWFnYXppbmUgKGh0dHA6Ly9lbGVrdG9yLWVsZWN0cm9uaWNzLmNvLnVrKQorICovCisjZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKKyNkZWZpbmUgRUxFS1RPUl9GVDMyM1JfUElECTB4MDAwNQkvKiBSRklELVJlYWRlciwgaXNzdWUgMDktMjAwNiAqLworCisvKgorICogUG9zaWZsZXggaW5jIHJldGFpbCBlcXVpcG1lbnQgKGh0dHA6Ly93d3cucG9zaWZsZXguY29tLnR3KQorICovCisjZGVmaW5lIFBPU0lGTEVYX1ZJRAkJMHgwZDNhICAvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUE9TSUZMRVhfUFA3MDAwX1BJRAkweDAzMDAgIC8qIFBQLTcwMDBJSSB0aGVybWFsIHByaW50ZXIgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHR3byBLT0JJTCBjaGlwY2FyZCB0ZXJtaW5hbHMuCisgKi8KKyNkZWZpbmUgS09CSUxfVklECQkweDBkNDYJLyogS09CSUwgVmVuZG9yIElEICovCisjZGVmaW5lIEtPQklMX0NPTlZfQjFfUElECTB4MjAyMAkvKiBLT0JJTCBLb252ZXJ0ZXIgZm9yIEIxICovCisjZGVmaW5lIEtPQklMX0NPTlZfS0FBTl9QSUQJMHgyMDIxCS8qIEtPQklMX0tvbnZlcnRlciBmb3IgS0FBTiAqLworCisjZGVmaW5lIEZURElfTkZfUklDX1ZJRAkweDBEQ0QJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEZURElfTkZfUklDX1BJRAkweDAwMDEJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogRmFsY29tIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEdtYkgKKyAqLworI2RlZmluZSBGQUxDT01fVklECQkweDBGOTQJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLworI2RlZmluZSBGQUxDT01fU0FNQkFfUElECTB4MDAwNQkvKiBGYWxjb20gU2FtYmEgVVNCIEdQUlMgbW9kZW0gKi8KKworLyogTGFyc2VuIGFuZCBCcnVzZ2FhcmQgQWx0aVRyYWNrL1VTQnRyYWNrICAqLworI2RlZmluZSBMQVJTRU5CUlVTR0FBUkRfVklECQkweDBGRDgKKyNkZWZpbmUgTEJfQUxUSVRSQUNLX1BJRAkJMHgwMDAxCisKKy8qCisgKiBUVGkgKFRodXJsYnkgVGhhbmRhciBJbnN0cnVtZW50cykKKyAqLworI2RlZmluZSBUVElfVklECQkJMHgxMDNFCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBUVElfUUwzNTVQX1BJRAkJMHgwM0U4CS8qIFRUaSBRTDM1NVAgcG93ZXIgc3VwcGx5ICovCisKKy8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCisvKiBEZXZlbG9wZWQgZm9yIEludGVyYmlvbWV0cmljcyBieSBSdWRvbGYgR3VnbGVyICovCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQorI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQgMHgxMDA2CisKKy8qCisgKiBUZXN0byBwcm9kdWN0cyAoaHR0cDovL3d3dy50ZXN0by5jb20vKQorICogU3VibWl0dGVkIGJ5IENvbGluIExlcm95CisgKi8KKyNkZWZpbmUgVEVTVE9fVklECQkJMHgxMjhECisjZGVmaW5lIFRFU1RPX1VTQl9JTlRFUkZBQ0VfUElECQkweDAwMDEKKworLyoKKyAqIE1vYmlsaXR5IEVsZWN0cm9uaWNzIHByb2R1Y3RzLgorICovCisjZGVmaW5lIE1PQklMSVRZX1ZJRAkJCTB4MTM0MgorI2RlZmluZSBNT0JJTElUWV9VU0JfU0VSSUFMX1BJRAkJMHgwMjAyCS8qIEVhc2lEb2NrIFVTQiAyMDAgc2VyaWFsICovCisKKy8qCisgKiBGSUMgLyBPcGVuTW9rbywgSW5jLiBodHRwOi8vd2lraS5vcGVubW9rby5vcmcvd2lraS9OZW8xOTczX0RlYnVnX0JvYXJkX3YzCisgKiBTdWJtaXR0ZWQgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG9wZW5tb2tvLm9yZz4KKyAqLworI2RlZmluZQlGSUNfVklECQkJMHgxNDU3CisjZGVmaW5lCUZJQ19ORU8xOTczX0RFQlVHX1BJRAkweDUxMTgKKworLyogT2xpbWV4ICovCisjZGVmaW5lIE9MSU1FWF9WSUQJCQkweDE1QkEKKyNkZWZpbmUgT0xJTUVYX0FSTV9VU0JfT0NEX1BJRAkJMHgwMDAzCisKKy8qCisgKiBUZWxsZHVzIFRlY2hub2xvZ2llcworICovCisjZGVmaW5lIFRFTExEVVNfVklECQkJMHgxNzgxCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBURUxMRFVTX1RFTExTVElDS19QSUQJCTB4MEMzMAkvKiBSRiBjb250cm9sIGRvbmdsZSA0MzMgTUh6IHVzaW5nIEZUMjMyUkwgKi8KKworLyoKKyAqIEJheWVyIEFzY2Vuc2lhIENvbnRvdXIgYmxvb2QgZ2x1Y29zZSBtZXRlciBVU0ItY29udmVydGVyIGNhYmxlLgorICogaHR0cDovL3dpbmdsdWNvZmFjdHMuY29tL2NhYmxlcy8KKyAqLworI2RlZmluZSBCQVlFUl9WSUQgICAgICAgICAgICAgICAgICAgICAgMHgxQTc5CisjZGVmaW5lIEJBWUVSX0NPTlRPVVJfQ0FCTEVfUElEICAgICAgICAweDYwMDEKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBGVERJIFJhbmdlCisgKiBBbnl0aGluZyBpbiB0aGlzIHJhbmdlIHdpbGwgdXNlIGFuIEZUMjMyUkwuCisgKi8KKyNkZWZpbmUgTVRYT1JCX1ZJRAkJCTB4MUIzRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAwX1BJRAkweDAxMDAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQJMHgwMTAxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDJfUElECTB4MDEwMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAzX1BJRAkweDAxMDMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQJMHgwMTA0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDVfUElECTB4MDEwNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA2X1BJRAkweDAxMDYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQJMHgwMTA3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDhfUElECTB4MDEwOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA5X1BJRAkweDAxMDkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQJMHgwMTBBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEJfUElECTB4MDEwQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBDX1BJRAkweDAxMEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQJMHgwMTBECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEVfUElECTB4MDEwRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBGX1BJRAkweDAxMEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQJMHgwMTEwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTFfUElECTB4MDExMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEyX1BJRAkweDAxMTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQJMHgwMTEzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTRfUElECTB4MDExNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE1X1BJRAkweDAxMTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQJMHgwMTE2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTdfUElECTB4MDExNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE4X1BJRAkweDAxMTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQJMHgwMTE5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUFfUElECTB4MDExQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFCX1BJRAkweDAxMUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQJMHgwMTFDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMURfUElECTB4MDExRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFFX1BJRAkweDAxMUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQJMHgwMTFGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjBfUElECTB4MDEyMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIxX1BJRAkweDAxMjEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQJMHgwMTIyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjNfUElECTB4MDEyMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI0X1BJRAkweDAxMjQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQJMHgwMTI1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjZfUElECTB4MDEyNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI3X1BJRAkweDAxMjcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOF9QSUQJMHgwMTI4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElECTB4MDEyOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJBX1BJRAkweDAxMkEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQl9QSUQJMHgwMTJCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElECTB4MDEyQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJEX1BJRAkweDAxMkQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQJMHgwMTJFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkZfUElECTB4MDEyRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMwX1BJRAkweDAxMzAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQJMHgwMTMxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzJfUElECTB4MDEzMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMzX1BJRAkweDAxMzMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQJMHgwMTM0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzVfUElECTB4MDEzNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM2X1BJRAkweDAxMzYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQJMHgwMTM3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzhfUElECTB4MDEzOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM5X1BJRAkweDAxMzkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQJMHgwMTNBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0JfUElECTB4MDEzQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNDX1BJRAkweDAxM0MKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQJMHgwMTNECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0VfUElECTB4MDEzRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNGX1BJRAkweDAxM0YKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQJMHgwMTQwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDFfUElECTB4MDE0MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQyX1BJRAkweDAxNDIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQJMHgwMTQzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDRfUElECTB4MDE0NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ1X1BJRAkweDAxNDUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQJMHgwMTQ2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDdfUElECTB4MDE0NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ4X1BJRAkweDAxNDgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQJMHgwMTQ5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEFfUElECTB4MDE0QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRCX1BJRAkweDAxNEIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQJMHgwMTRDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNERfUElECTB4MDE0RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRFX1BJRAkweDAxNEUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQJMHgwMTRGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTBfUElECTB4MDE1MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUxX1BJRAkweDAxNTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQJMHgwMTUyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTNfUElECTB4MDE1MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU0X1BJRAkweDAxNTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NV9QSUQJMHgwMTU1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTZfUElECTB4MDE1NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU3X1BJRAkweDAxNTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OF9QSUQJMHgwMTU4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTlfUElECTB4MDE1OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVBX1BJRAkweDAxNUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ql9QSUQJMHgwMTVCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUNfUElECTB4MDE1QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVEX1BJRAkweDAxNUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RV9QSUQJMHgwMTVFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUZfUElECTB4MDE1RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYwX1BJRAkweDAxNjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MV9QSUQJMHgwMTYxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjJfUElECTB4MDE2MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYzX1BJRAkweDAxNjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NF9QSUQJMHgwMTY0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjVfUElECTB4MDE2NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY2X1BJRAkweDAxNjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2N19QSUQJMHgwMTY3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjhfUElECTB4MDE2OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY5X1BJRAkweDAxNjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2QV9QSUQJMHgwMTZBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkJfUElECTB4MDE2QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZDX1BJRAkweDAxNkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RF9QSUQJMHgwMTZECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkVfUElECTB4MDE2RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZGX1BJRAkweDAxNkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MF9QSUQJMHgwMTcwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzFfUElECTB4MDE3MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcyX1BJRAkweDAxNzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3M19QSUQJMHgwMTczCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzRfUElECTB4MDE3NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc1X1BJRAkweDAxNzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Nl9QSUQJMHgwMTc2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzdfUElECTB4MDE3NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc4X1BJRAkweDAxNzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OV9QSUQJMHgwMTc5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0FfUElECTB4MDE3QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdCX1BJRAkweDAxN0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Q19QSUQJMHgwMTdDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0RfUElECTB4MDE3RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdFX1BJRAkweDAxN0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Rl9QSUQJMHgwMTdGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODBfUElECTB4MDE4MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgxX1BJRAkweDAxODEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ml9QSUQJMHgwMTgyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODNfUElECTB4MDE4MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg0X1BJRAkweDAxODQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NV9QSUQJMHgwMTg1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODZfUElECTB4MDE4NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg3X1BJRAkweDAxODcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OF9QSUQJMHgwMTg4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODlfUElECTB4MDE4OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThBX1BJRAkweDAxOEEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ql9QSUQJMHgwMThCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOENfUElECTB4MDE4QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThEX1BJRAkweDAxOEQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RV9QSUQJMHgwMThFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEZfUElECTB4MDE4RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkwX1BJRAkweDAxOTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MV9QSUQJMHgwMTkxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTJfUElECTB4MDE5MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkzX1BJRAkweDAxOTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NF9QSUQJMHgwMTk0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTVfUElECTB4MDE5NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk2X1BJRAkweDAxOTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5N19QSUQJMHgwMTk3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOThfUElECTB4MDE5OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk5X1BJRAkweDAxOTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5QV9QSUQJMHgwMTlBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUJfUElECTB4MDE5QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlDX1BJRAkweDAxOUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RF9QSUQJMHgwMTlECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUVfUElECTB4MDE5RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlGX1BJRAkweDAxOUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMF9QSUQJMHgwMUEwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTFfUElECTB4MDFBMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEyX1BJRAkweDAxQTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBM19QSUQJMHgwMUEzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTRfUElECTB4MDFBNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE1X1BJRAkweDAxQTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNl9QSUQJMHgwMUE2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTdfUElECTB4MDFBNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE4X1BJRAkweDAxQTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOV9QSUQJMHgwMUE5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUFfUElECTB4MDFBQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFCX1BJRAkweDAxQUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQ19QSUQJMHgwMUFDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQURfUElECTB4MDFBRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFFX1BJRAkweDAxQUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRl9QSUQJMHgwMUFGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjBfUElECTB4MDFCMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIxX1BJRAkweDAxQjEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMl9QSUQJMHgwMUIyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjNfUElECTB4MDFCMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI0X1BJRAkweDAxQjQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNV9QSUQJMHgwMUI1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjZfUElECTB4MDFCNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI3X1BJRAkweDAxQjcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOF9QSUQJMHgwMUI4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjlfUElECTB4MDFCOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJBX1BJRAkweDAxQkEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQl9QSUQJMHgwMUJCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkNfUElECTB4MDFCQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJEX1BJRAkweDAxQkQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRV9QSUQJMHgwMUJFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkZfUElECTB4MDFCRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMwX1BJRAkweDAxQzAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMV9QSUQJMHgwMUMxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzJfUElECTB4MDFDMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMzX1BJRAkweDAxQzMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNF9QSUQJMHgwMUM0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzVfUElECTB4MDFDNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM2X1BJRAkweDAxQzYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDN19QSUQJMHgwMUM3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzhfUElECTB4MDFDOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM5X1BJRAkweDAxQzkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQV9QSUQJMHgwMUNBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0JfUElECTB4MDFDQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNDX1BJRAkweDAxQ0MKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRF9QSUQJMHgwMUNECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0VfUElECTB4MDFDRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNGX1BJRAkweDAxQ0YKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMF9QSUQJMHgwMUQwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDFfUElECTB4MDFEMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQyX1BJRAkweDAxRDIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEM19QSUQJMHgwMUQzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDRfUElECTB4MDFENAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ1X1BJRAkweDAxRDUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENl9QSUQJMHgwMUQ2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDdfUElECTB4MDFENworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ4X1BJRAkweDAxRDgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOV9QSUQJMHgwMUQ5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREFfUElECTB4MDFEQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURCX1BJRAkweDAxREIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQ19QSUQJMHgwMURDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRERfUElECTB4MDFERAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURFX1BJRAkweDAxREUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERl9QSUQJMHgwMURGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTBfUElECTB4MDFFMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUxX1BJRAkweDAxRTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMl9QSUQJMHgwMUUyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTNfUElECTB4MDFFMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU0X1BJRAkweDAxRTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNV9QSUQJMHgwMUU1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTZfUElECTB4MDFFNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU3X1BJRAkweDAxRTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOF9QSUQJMHgwMUU4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTlfUElECTB4MDFFOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVBX1BJRAkweDAxRUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQl9QSUQJMHgwMUVCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUNfUElECTB4MDFFQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVEX1BJRAkweDAxRUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRV9QSUQJMHgwMUVFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUZfUElECTB4MDFFRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYwX1BJRAkweDAxRjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMV9QSUQJMHgwMUYxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjJfUElECTB4MDFGMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYzX1BJRAkweDAxRjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNF9QSUQJMHgwMUY0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjVfUElECTB4MDFGNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY2X1BJRAkweDAxRjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGN19QSUQJMHgwMUY3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjhfUElECTB4MDFGOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY5X1BJRAkweDAxRjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQV9QSUQJMHgwMUZBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkJfUElECTB4MDFGQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZDX1BJRAkweDAxRkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRF9QSUQJMHgwMUZECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkVfUElECTB4MDFGRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRAkweDAxRkYKKworCisKKy8qCisgKiBUaGUgTW9iaWxpdHkgTGFiIChUTUwpCisgKiBTdWJtaXR0ZWQgYnkgUGllcnJlIENhc3RlbGxhCisgKi8KKyNkZWZpbmUgVE1MX1ZJRAkJCTB4MUI5MQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgVE1MX1VTQl9TRVJJQUxfUElECTB4MDA2NAkvKiBVU0IgLSBTZXJpYWwgQ29udmVydGVyICovCisKKy8qIEFsdGktMiBwcm9kdWN0cyAgaHR0cDovL3d3dy5hbHRpLTIuY29tICovCisjZGVmaW5lIEFMVEkyX1ZJRAkweDFCQzkKKyNkZWZpbmUgQUxUSTJfTjNfUElECTB4NjAwMQkvKiBOZXB0dW5lIDMgKi8KKworLyoKKyAqIERyZXNkZW4gRWxla3Ryb25pYyBTZW5zb3IgVGVybWluYWwgQm9hcmQKKyAqLworI2RlZmluZSBERV9WSUQJCQkweDFjZjEgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFNUQl9QSUQJCQkweDAwMDEgLyogU2Vuc29yIFRlcm1pbmFsIEJvYXJkICovCisjZGVmaW5lIFdIVF9QSUQJCQkweDAwMDQgLyogV2lyZWxlc3MgSGFuZGhlbGQgVGVybWluYWwgKi8KKworLyoKKyAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQorICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KKyAqLworCisjZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLworI2RlZmluZSBQQVBPVUNIX1FVSURPNHg0X1BJRAkJMHgwOTAwCS8qIFF1aWRvIDQvNCBNb2R1bGUgKi8KKworLyoKKyAqIE1hcnZlbGwgU2hlZXZhUGx1ZworICovCisjZGVmaW5lIE1BUlZFTExfVklECQkweDllODgKKyNkZWZpbmUgTUFSVkVMTF9TSEVFVkFQTFVHX1BJRAkweDllOGYKKworLyoKKyAqIEV2b2x1dGlvbiBSb2JvdGljcyBwcm9kdWN0cyAoaHR0cDovL3d3dy5ldm9sdXRpb24uY29tLykuCisgKiBTdWJtaXR0ZWQgYnkgU2hhd24gTS4gTGF2ZWxsZS4KKyAqLworI2RlZmluZSBFVk9MVVRJT05fVklECQkweERFRUUJLyogVmVuZG9yIElEICovCisjZGVmaW5lIEVWT0xVVElPTl9FUjFfUElECTB4MDMwMAkvKiBFUjEgQ29udHJvbCBNb2R1bGUgKi8KKyNkZWZpbmUgRVZPXzhVMjMyQU1fUElECTB4MDJGRgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNMiAoRlQyMzJBTSkqLworI2RlZmluZSBFVk9fSFlCUklEX1BJRAkJMHgwMzAyCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAoRlQyMzJCTSkqLworI2RlZmluZSBFVk9fUkNNNF9QSUQJCTB4MDMwMwkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IGJiZTAwNWMuLmYxZWEzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KQogCQlzdGFydF9pbyA9IGZhbHNlOwogCWVsc2UgewotCQlzdGFydF9pbyA9IChfX2tmaWZvX2xlbihwb3J0LT53cml0ZV9maWZvKSAhPSAwKTsKKwkJc3RhcnRfaW8gPSAoa2ZpZm9fbGVuKCZwb3J0LT53cml0ZV9maWZvKSAhPSAwKTsKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSBzdGFydF9pbzsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCXJldHVybiAwOwogCiAJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwotCWNvdW50ID0ga2ZpZm9fZ2V0KHBvcnQtPndyaXRlX2ZpZm8sIGRhdGEsIHBvcnQtPmJ1bGtfb3V0X3NpemUpOworCWNvdW50ID0ga2ZpZm9fb3V0X2xvY2tlZCgmcG9ydC0+d3JpdGVfZmlmbywgZGF0YSwgcG9ydC0+YnVsa19vdXRfc2l6ZSwgJnBvcnQtPmxvY2spOwogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LCBkYXRhKTsKIAogCS8qIHNldCB1cCBvdXIgdXJiICovCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmV0dXJuIHVzYl9zZXJpYWxfbXVsdGlfdXJiX3dyaXRlKHR0eSwgcG9ydCwKIAkJCQkJCSAgYnVmLCBjb3VudCk7CiAKLQljb3VudCA9IGtmaWZvX3B1dChwb3J0LT53cml0ZV9maWZvLCBidWYsIGNvdW50KTsKKwljb3VudCA9IGtmaWZvX2luX2xvY2tlZCgmcG9ydC0+d3JpdGVfZmlmbywgYnVmLCBjb3VudCwgJnBvcnQtPmxvY2spOwogCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChwb3J0KTsKIAogCWlmIChyZXN1bHQgPj0gMCkKQEAgLTM3MCw3ICszNzAsNyBAQAogCQkJCShzZXJpYWwtPnR5cGUtPm1heF9pbl9mbGlnaHRfdXJicyAtCiAJCQkJIHBvcnQtPnVyYnNfaW5fZmxpZ2h0KTsKIAl9IGVsc2UgaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQotCQlyb29tID0gcG9ydC0+d3JpdGVfZmlmby0+c2l6ZSAtIF9fa2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pOworCQlyb29tID0ga2ZpZm9fYXZhaWwoJnBvcnQtPndyaXRlX2ZpZm8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJCWNoYXJzID0gcG9ydC0+dHhfYnl0ZXNfZmxpZ2h0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChzZXJpYWwtPm51bV9idWxrX291dCkKLQkJY2hhcnMgPSBrZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbyk7CisJCWNoYXJzID0ga2ZpZm9fbGVuKCZwb3J0LT53cml0ZV9maWZvKTsKIAogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIGNoYXJzKTsKIAlyZXR1cm4gY2hhcnM7CkBAIC01MDcsNyArNTA3LDcgQEAKIAkJaWYgKHN0YXR1cykgewogCQkJZGJnKCIlcyAtIG5vbnplcm8gbXVsdGktdXJiIHdyaXRlIGJ1bGsgc3RhdHVzICIKIAkJCQkicmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JCQlrZmlmb19yZXNldChwb3J0LT53cml0ZV9maWZvKTsKKwkJCWtmaWZvX3Jlc2V0X291dCgmcG9ydC0+d3JpdGVfZmlmbyk7CiAJCX0gZWxzZQogCQkJdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3N0YXJ0KHBvcnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDQ4NWZhOWMuLjJjZmUyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtMTI3LDggKzEyNyw5IEBACiAjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VUzlNTDJfNAkweEFDMzAKICNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTUFRMNF8yCTB4QUMzMQogI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzQJMHhBQzMyCi0jZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIgICAgICAgMHhBQzQyCi0jZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQgICAgICAgMHhBQzQ0CisjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIJMHhBQzQyCisjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQJMHhBQzQ0CisjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEwyXzQJMHhBQzI0CiAKIC8qIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMKICAqIEFURU4gVUMyMzI0IGRldmljZSB1c2luZyBNb3NjaGlwIE1DUzc4NDAKQEAgLTE5MSw2ICsxOTIsNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDJfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzIyKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtMjA3LDYgKzIwOSw3IEBACiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTUFRMNF80KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfMil9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMMl80KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjIpfSwKIAl7fQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggOWEyYjkwMy4uNmU5NGE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMzQwLDYgKzM0MCwxMCBAQAogI2RlZmluZSBGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQJCTB4MWM5ZQogI2RlZmluZSBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxNAkJMHg5NjAzCiAKKy8qIEhhaWVyIHByb2R1Y3RzICovCisjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKKyNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCkBAIC02NDEsNiArNjQ1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCiAJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyBVU0JfREVWSUNFKEZPVVJfR19TWVNURU1TX1ZFTkRPUl9JRCwgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQpIH0sCisJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb3B0aW9uX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA0NTQzZjM1Li4zM2M4NWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTU5NSw4ICs1OTUsNyBAQAogCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOwogCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKIAl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOwotCWlmICghSVNfRVJSKHBvcnQtPndyaXRlX2ZpZm8pICYmIHBvcnQtPndyaXRlX2ZpZm8pCi0JCWtmaWZvX2ZyZWUocG9ydC0+d3JpdGVfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcG9ydC0+d3JpdGVfZmlmbyk7CiAJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwogCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CiAJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CkBAIC05MzksOSArOTM4LDcgQEAKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9Ci0JCXBvcnQtPndyaXRlX2ZpZm8gPSBrZmlmb19hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkmcG9ydC0+bG9jayk7Ci0JCWlmIChJU19FUlIocG9ydC0+d3JpdGVfZmlmbykpCisJCWlmIChrZmlmb19hbGxvYygmcG9ydC0+d3JpdGVfZmlmbywgUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGRhODRmZDAuLjA4OGYzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTM2OCw3ICszNjgsNyBAQAogCiBjb25maWcgR0VPREVfV0RUCiAJdHJpc3RhdGUgIkFNRCBHZW9kZSBDUzU1MzUvQ1M1NTM2IFdhdGNoZG9nIgotCWRlcGVuZHMgb24gTUdFT0RFX0xYCisJZGVwZW5kcyBvbiBDUzU1MzVfTUZHUFQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBlbmFibGVzIGEgd2F0Y2hkb2cgY2FwYWJpbGl0eSBidWlsdCBpbnRvIHRoZQogCSAgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcHMgZm9yIHRoZSBBTUQgR2VvZGUgR1ggYW5kIExYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCmluZGV4IDljNjU5NDQuLjlkN2QxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCkBAIC0yNDIsMTQgKzI0MiwxNCBAQAogCX0KIAogCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCQkJcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAl3ZHQtPmJhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAotCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCQlyZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghd2R0LT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKaW5kZXggZThhZTYzOC4uMDM3ODQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXdkdC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJd2R0LT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CiAJaWYgKCF3ZHQtPnJlZ3MpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IG1hcCBJL08gbWVtb3J5XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCA5ZDc1MjBmLi44ODcxMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCmluZGV4IDlhY2YwMDEuLjM4MjUyZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKQEAgLTEsNiArMSw3IEBACi0vKiBXYXRjaGRvZyB0aW1lciBmb3IgdGhlIEdlb2RlIEdYL0xYIHdpdGggdGhlIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXAKKy8qIFdhdGNoZG9nIHRpbWVyIGZvciBtYWNoaW5lcyB3aXRoIHRoZSBDUzU1MzUvQ1M1NTM2IGNvbXBhbmlvbiBjaGlwCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTksNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgogCiAjZGVmaW5lIEdFT0RFV0RUX0haIDUwMAogI2RlZmluZSBHRU9ERVdEVF9TQ0FMRSA2CkBAIC00NiwyNSArNDcsMjUgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdlb2Rld2R0X3BsYXRmb3JtX2RldmljZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9mbGFnczsKLXN0YXRpYyBpbnQgd2R0X3RpbWVyOworc3RhdGljIHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKndkdF90aW1lcjsKIHN0YXRpYyBpbnQgc2FmZV9jbG9zZTsKIAogc3RhdGljIHZvaWQgZ2VvZGV3ZHRfcGluZyh2b2lkKQogewogCS8qIFN0b3AgdGhlIGNvdW50ZXIgKi8KLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKIAogCS8qIFJlc2V0IHRoZSBjb3VudGVyICovCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOwogCiAJLyogRW5hYmxlIHRoZSBjb3VudGVyICovCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIE1GR1BUX1NFVFVQX0NOVEVOKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIE1GR1BUX1NFVFVQX0NOVEVOKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VvZGV3ZHRfZGlzYWJsZSh2b2lkKQogewotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKIH0KIAogc3RhdGljIGludCBnZW9kZXdkdF9zZXRfaGVhcnRiZWF0KGludCB2YWwpCkBAIC03MiwxMCArNzMsMTAgQEAKIAlpZiAodmFsIDwgMSB8fCB2YWwgPiBHRU9ERVdEVF9NQVhfU0VDT05EUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwgdmFsICogR0VPREVXRFRfSFopOwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwgdmFsICogR0VPREVXRFRfSFopOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIE1GR1BUX1NFVFVQX0NOVEVOKTsKIAogCXRpbWVvdXQgPSB2YWw7CiAJcmV0dXJuIDA7CkBAIC0yMTUsMjggKzIxNiwyNSBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW9kZXdkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCwgdGltZXI7CisJaW50IHJldDsKIAotCXRpbWVyID0gZ2VvZGVfbWZncHRfYWxsb2NfdGltZXIoTUZHUFRfVElNRVJfQU5ZLCBNRkdQVF9ET01BSU5fV09SS0lORyk7Ci0KLQlpZiAodGltZXIgPT0gLTEpIHsKKwl3ZHRfdGltZXIgPSBjczU1MzVfbWZncHRfYWxsb2NfdGltZXIoTUZHUFRfVElNRVJfQU5ZLCBNRkdQVF9ET01BSU5fV09SS0lORyk7CisJaWYgKCF3ZHRfdGltZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJnZW9kZXdkdDogIE5vIHRpbWVycyB3ZXJlIGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXdkdF90aW1lciA9IHRpbWVyOwotCiAJLyogU2V0IHVwIHRoZSB0aW1lciAqLwogCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsCisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLAogCQkJICBHRU9ERVdEVF9TQ0FMRSB8ICgzIDw8IDgpKTsKIAogCS8qIFNldCB1cCBjb21wYXJhdG9yIDIgdG8gcmVzZXQgd2hlbiB0aGUgZXZlbnQgZmlyZXMgKi8KLQlnZW9kZV9tZmdwdF90b2dnbGVfZXZlbnQod2R0X3RpbWVyLCBNRkdQVF9DTVAyLCBNRkdQVF9FVkVOVF9SRVNFVCwgMSk7CisJY3M1NTM1X21mZ3B0X3RvZ2dsZV9ldmVudCh3ZHRfdGltZXIsIE1GR1BUX0NNUDIsIE1GR1BUX0VWRU5UX1JFU0VULCAxKTsKIAogCS8qIFNldCB1cCB0aGUgaW5pdGlhbCB0aW1lb3V0ICovCiAKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DTVAyLAorCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DTVAyLAogCQl0aW1lb3V0ICogR0VPREVXRFRfSFopOwogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZ2VvZGV3ZHRfbWlzY2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKaW5kZXggZTQ0ZmJiMy4uYzhhM2JlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwpAQCAtMzAsNiArMzAsNyBAQAogICoJZG9jdW1lbnQgbnVtYmVyIDMxNjk3Mi0wMDQsIDMxNjk3My0wMTI6IDgyODAxSSAoSUNIOSkKICAqCWRvY3VtZW50IG51bWJlciAzMTk5NzMtMDAyLCAzMTk5NzQtMDAyOiA4MjgwMUogKElDSDEwKQogICoJZG9jdW1lbnQgbnVtYmVyIDMyMjE2OS0wMDEsIDMyMjE3MC0wMDE6IDUgU2VyaWVzLCAzNDAwIFNlcmllcyAoUENIKQorICoJZG9jdW1lbnQgbnVtYmVyIDMyMDA2Ni0wMDMsIDMyMDI1Ny0wMDg6IEVQODA1OTcgKElJQ0gpCiAgKi8KIAogLyoKQEAgLTEwMCw2ICsxMDEsNyBAQAogCVRDT19QQ0gsCS8qIFBDSCBEZXNrdG9wIEZ1bGwgRmVhdHVyZWQgKi8KIAlUQ09fUENITSwJLyogUENIIE1vYmlsZSBGdWxsIEZlYXR1cmVkICovCiAJVENPX1BDSE1TRkYsCS8qIFBDSCBNb2JpbGUgU0ZGIEZ1bGwgRmVhdHVyZWQgKi8KKwlUQ09fRVA4MDU3OSwJLyogRVA4MDU3OSAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0xNDMsNiArMTQ1LDcgQEAKIAl7IlBDSCBEZXNrdG9wIEZ1bGwgRmVhdHVyZWQiLCAyfSwKIAl7IlBDSCBNb2JpbGUgRnVsbCBGZWF0dXJlZCIsIDJ9LAogCXsiUENIIE1vYmlsZSBTRkYgRnVsbCBGZWF0dXJlZCIsIDJ9LAorCXsiRVA4MDU3OSIsIDJ9LAogCXtOVUxMLCAwfQogfTsKIApAQCAtMjE0LDYgKzIxNyw3IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgzYjAwLAkJCQlUQ09fUENIKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgzYjAxLAkJCQlUQ09fUENITSl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4M2IwZCwJCQkJVENPX1BDSE1TRkYpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDUwMzEsCQkJCVRDT19FUDgwNTc5KX0sCiAJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlUQ09fd2R0X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCA4M2ZhMzRiLi5hMmRjMDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBlcnJfZnJlZTsKIAl9Ci0Jd2R0LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl3ZHQtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3ZHQtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwppbmRleCBhY2Y1ODlkLi5hNTFkYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbXY2NHg2MF93ZHRfcmVncyA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJbXY2NHg2MF93ZHRfcmVncyA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWlmIChtdjY0eDYwX3dkdF9yZWdzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKaW5kZXggNDI5ZWE5OS4uYzZhYWYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtMjc3LDggKzI3Nyw3IEBACiAJCWdvdG8gZXJyX2J1c3k7CiAJfQogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJIHBkZXYtPm5hbWUpOworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOwogCWlmICghbWVtKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnJfYnVzeTsKQEAgLTMwNiw3ICszMDUsNyBAQAogCQlnb3RvIGVycl9jbGs7CiAJfQogCi0Jd2Rldi0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJd2Rldi0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXdkZXYtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKQEAgLTM1OCw3ICszNTcsNyBAQAogCWtmcmVlKHdkZXYpOwogCiBlcnJfa3phbGxvYzoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIGVycl9idXN5OgogZXJyX2dldF9yZXNvdXJjZToKQEAgLTM4Myw3ICszODIsNyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAogCW1pc2NfZGVyZWdpc3RlcigmKHdkZXYtPm9tYXBfd2R0X21pc2NkZXYpKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAljbGtfcHV0KHdkZXYtPmljayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKaW5kZXggNGQyMjdiMTUuLjQzMGE1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggODViOTNlMS4uODc2MGEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNpemUgPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCWlmICh3ZHRfbWVtID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb25cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy90eHg5d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYwppbmRleCA2YWRhYjc3Li5kNjM1NTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYwpAQCAtMjE0LDEyICsyMTQsMTAgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCiAJCWdvdG8gZXhpdF9idXN5OwotCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJmRldi0+ZGV2LAotCQkJCSAgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCSAgICAgInR4eDl3ZHQiKSkKIAkJZ290byBleGl0X2J1c3k7Ci0JdHh4OXdkdF9yZWcgPSBkZXZtX2lvcmVtYXAoJmRldi0+ZGV2LAotCQkJCSAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXR4eDl3ZHRfcmVnID0gZGV2bV9pb3JlbWFwKCZkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXR4eDl3ZHRfcmVnKQogCQlnb3RvIGV4aXRfYnVzeTsKIApkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggMmM5OTQ1OS4uOWYwYmYxMyAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGFub25faW5vZGVfaW5vZGUpOwogCiAJZXJyb3IgPSAtRU5GSUxFOwotCWZpbGUgPSBhbGxvY19maWxlKCZwYXRoLCBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUsIGZvcHMpOworCWZpbGUgPSBhbGxvY19maWxlKCZwYXRoLCBPUEVOX0ZNT0RFKGZsYWdzKSwgZm9wcyk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIGVycl9kcHV0OwogCWZpbGUtPmZfbWFwcGluZyA9IGFub25faW5vZGVfaW5vZGUtPmlfbWFwcGluZzsKIAogCWZpbGUtPmZfcG9zID0gMDsKLQlmaWxlLT5mX2ZsYWdzID0gT19SRFdSIHwgKGZsYWdzICYgT19OT05CTE9DSyk7CisJZmlsZS0+Zl9mbGFncyA9IGZsYWdzICYgKE9fQUNDTU9ERSB8IE9fTk9OQkxPQ0spOwogCWZpbGUtPmZfdmVyc2lvbiA9IDA7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCAxNGNiYzgzLi4zMzJkZDAwIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMTYwMCw4ICsxNjAwLDYgQEAKIAljYXNlIEtEU0tCTUVUQToKIAljYXNlIEtEU0tCTEVEOgogCWNhc2UgS0RTRVRMRUQ6Ci0JLyogU0cgc3R1ZmYgKi8KLQljYXNlIFNHX1NFVF9UUkFOU0ZPUk06CiAJLyogQVVUT0ZTICovCiAJY2FzZSBBVVRPRlNfSU9DX1JFQURZOgogCWNhc2UgQVVUT0ZTX0lPQ19GQUlMOgpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IDhiNDdlNDIuLmQyNjQwMmYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAogCWZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoIltldmVudGZkXSIsICZldmVudGZkX2ZvcHMsIGN0eCwKLQkJCQkgIGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkJICBPX1JEV1IgfCAoZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSk7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZXZlbnRmZF9mcmVlX2N0eChjdHgpOwogCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IDM2NmM1MDMuLmJkMDU2YTUgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCSAqIGEgZmlsZSBzdHJ1Y3R1cmUgYW5kIGEgZnJlZSBmaWxlIGRlc2NyaXB0b3IuCiAJICovCiAJZXJyb3IgPSBhbm9uX2lub2RlX2dldGZkKCJbZXZlbnRwb2xsXSIsICZldmVudHBvbGxfZm9wcywgZXAsCi0JCQkJIGZsYWdzICYgT19DTE9FWEVDKTsKKwkJCQkgT19SRFdSIHwgKGZsYWdzICYgT19DTE9FWEVDKSk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZXBfZnJlZShlcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhZDE0MjI3Li40NTVlNmU2IDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAkJaWYgKG1heF9ibG9ja3MgPiBESU9fTUFYX0JMT0NLUykKIAkJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBESU9fQ1JFRElUUyArCi0JCQkJMiAqIEVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CisJCQkJRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBvdXQ7CkBAIC0zMTQ2LDggKzMxNDYsOCBAQAogCiAJCS8qICh1c2VyK2dyb3VwKSoob2xkK25ldykgc3RydWN0dXJlLCBpbm9kZSB3cml0ZSAoc2IsCiAJCSAqIGlub2RlIGJsb2NrLCA/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+Y3VyX2Fpb19kaW8gPSBOVUxMOwogCWVpLT5pX3N5bmNfdGlkID0gMDsKQEAgLTEwMTQsNyArMTAxNyw5IEBACiAJLnJlc2VydmVfc3BhY2UJPSBkcXVvdF9yZXNlcnZlX3NwYWNlLAogCS5jbGFpbV9zcGFjZQk9IGRxdW90X2NsYWltX3NwYWNlLAogCS5yZWxlYXNlX3Jzdgk9IGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UsCisjaWZkZWYgQ09ORklHX1FVT1RBCiAJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAorI2VuZGlmCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAogCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCAwYWZhY2Y2Li42OTY1MmM1IDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xODYsMTAgKzE4Niw4IEBACiAJICogdGhhdCB3ZSBjYW4gZG8gZGVidWdnaW5nIGNoZWNrcyBhdCBfX2ZwdXQoKQogCSAqLwogCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhc3BlY2lhbF9maWxlKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgewotCQlpbnQgZXJyb3IgPSAwOwogCQlmaWxlX3Rha2Vfd3JpdGUoZmlsZSk7Ci0JCWVycm9yID0gbW50X2Nsb25lX3dyaXRlKHBhdGgtPm1udCk7Ci0JCVdBUk5fT04oZXJyb3IpOworCQlXQVJOX09OKG1udF9jbG9uZV93cml0ZShwYXRoLT5tbnQpKTsKIAl9CiAJaW1hX2NvdW50c19nZXQoZmlsZSk7CiAJcmV0dXJuIGZpbGU7CmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCBmNjdjZDE0Li5lOTZhMTY2IDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTg1LDMgKzg1LDEwIEBACiAgKiBzdXBlci5jCiAgKi8KIGV4dGVybiBpbnQgZG9fcmVtb3VudF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCB2b2lkICosIGludCk7CisKKy8qCisgKiBvcGVuLmMKKyAqLworc3RydWN0IG5hbWVpZGF0YTsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IDQxNjBhZmEuLmJkMjI0ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKIHsKIAlqYmRfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImpiZCIsIE5VTEwpOwogCWlmIChqYmRfZGVidWdmc19kaXIpCi0JCWpiZF9kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX3U4KCJqYmQtZGVidWciLCBTX0lSVUdPLAorCQlqYmRfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OCgiamJkLWRlYnVnIiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSAgICAgICBqYmRfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmam91cm5hbF9lbmFibGVfZGVidWcpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiN2NhM2E5Li4xN2FmODc5IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMjExNSw3ICsyMTE1LDggQEAKIHsKIAlqYmQyX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJqYmQyIiwgTlVMTCk7CiAJaWYgKGpiZDJfZGVidWdmc19kaXIpCi0JCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsIFNfSVJVR08sCisJCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsCisJCQkJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGpiZDJfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDIyMzRjNzMuLmQ5MjlhODIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAkgKiBQYWdlIGNhY2hlIGlzIGluZGV4ZWQgYnkgbG9uZy4KIAkgKiBJIHdvdWxkIHVzZSBNQVhfTEZTX0ZJTEVTSVpFLCBidXQgaXQncyBvbmx5IGhhbGYgYXMgYmlnCiAJICovCi0Jc2ItPnNfbWF4Ynl0ZXMgPSBtaW4oKCh1NjQpIFBBR0VfQ0FDSEVfU0laRSA8PCAzMikgLSAxLCBzYi0+c19tYXhieXRlcyk7CisJc2ItPnNfbWF4Ynl0ZXMgPSBtaW4oKCh1NjQpIFBBR0VfQ0FDSEVfU0laRSA8PCAzMikgLSAxLCAodTY0KXNiLT5zX21heGJ5dGVzKTsKICNlbmRpZgogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCBkYWQ0YjgwLi42ODkyMWQ5IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTM3LDggKzM3LDYgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLSNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKLQogLyogW0ZlYi0xOTk3IFQuIFNjaG9lYmVsLVRoZXVlcl0KICAqIEZ1bmRhbWVudGFsIGNoYW5nZXMgaW4gdGhlIHBhdGhuYW1lIGxvb2t1cCBtZWNoYW5pc21zIChuYW1laSkKICAqIHdlcmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2Ygb21pcnIuICBUaGUgcmVhc29uIGlzIHRoYXQgb21pcnIgbmVlZHMKQEAgLTE2NDAsNiArMTYzOCw3IEBACiAJCWlmIChmaWxwID09IE5VTEwpCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5GSUxFKTsKIAkJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJCWZpbHAtPmZfZmxhZ3MgPSBvcGVuX2ZsYWc7CiAJCW5kLmludGVudC5vcGVuLmZsYWdzID0gZmxhZzsKIAkJbmQuaW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSAwOwogCQllcnJvciA9IGRvX3BhdGhfbG9va3VwKGRmZCwgcGF0aG5hbWUsCkBAIC0xNjg1LDYgKzE2ODQsNyBAQAogCWlmIChmaWxwID09IE5VTEwpCiAJCWdvdG8gZXhpdF9wYXJlbnQ7CiAJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJZmlscC0+Zl9mbGFncyA9IG9wZW5fZmxhZzsKIAluZC5pbnRlbnQub3Blbi5mbGFncyA9IGZsYWc7CiAJbmQuaW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSBtb2RlOwogCWRpciA9IG5kLnBhdGguZGVudHJ5OwpAQCAtMTcyNSw3ICsxNzI1LDcgQEAKIAkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBvcGVuX2ZsYWcpOworCQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kKTsKIAkJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAobmQucm9vdC5tbnQpCiAJCQlwYXRoX3B1dCgmbmQucm9vdCk7CkBAIC0xNzg5LDcgKzE3ODksNyBAQAogCQkJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOwogCQlnb3RvIGV4aXQ7CiAJfQotCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIG9wZW5fZmxhZyk7CisJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7CiAJaWYgKCFJU19FUlIoZmlscCkpIHsKIAkJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmZmlscC0+Zl9wYXRoLCBmaWxwLT5mX21vZGUgJgogCQkJICAgICAgIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggMWMxMjE3Ny4uNTVjOGU2MyAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtODksNyArODksNyBAQAogCWludCBmbGFncyA9IG5mc2V4cF9mbGFncyhycXN0cCwgZXhwKTsKIAogCS8qIENoZWNrIGlmIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQgZnJvbSBhIHNlY3VyZSBwb3J0LiAqLwotCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiAoZmxhZ3MgJiBORlNFWFBfSU5TRUNVUkVfUE9SVCkpIHsKKwlpZiAoIXJxc3RwLT5ycV9zZWN1cmUgJiYgIShmbGFncyAmIE5GU0VYUF9JTlNFQ1VSRV9QT1JUKSkgewogCQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAkJZHByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJuZnNkOiByZXF1ZXN0IGZyb20gaW5zZWN1cmUgcG9ydCAlcyFcbiIsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBmYjRlNjcyLi5kMTdiZGM3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTE3NjUsOSArMTc2NSw5IEBACiAgKgogICogVGhlIGFycmF5IGluZGV4IG9mIHRoZSBzdWJ0cmVlIHJvb3QgaXMgcGFzc2VkIGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCitpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCiB7CiAJaW50IGkgPSAwOwogCkBAIC0yODcyLDggKzI4NzIsOCBAQAogICogVGhpcyBsb29rcyBzaW1pbGFyLCBidXQgaXMgc3VidGx5IGRpZmZlcmVudCB0bwogICogb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoKS4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKQoraW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpCiB7CiAJaW50IGksIGosIHJldCA9IDA7CiAJdTY0IGJsa25vOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuaCBiL2ZzL29jZnMyL2FsbG9jLmgKaW5kZXggOWMxMjJkNTcuLjFkYjQzNTkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmgKKysrIGIvZnMvb2NmczIvYWxsb2MuaApAQCAtMzE3LDQgKzMxNyw5IEBACiBpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCk7CitpbnQgb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIHUzMiAqY3Bvcyk7CitpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpOwogI2VuZGlmIC8qIE9DRlMyX0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGYwMTBiMjIuLjNlOWI0NjAwMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yMTA4LDYgKzIxMDgsNyBAQAogCX0KIAlkaWRfcXVvdGFfaW5vZGUgPSAxOwogCisJaW5vZGUtPmlfbmxpbmsgPSAwOwogCS8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqLwogCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsCiAJCQkJICAgIDAsICZuZXdfZGlfYmgsIHBhcmVudF9kaV9iaCwgaGFuZGxlLApAQCAtMjEzNiw2ICsyMTM3LDcgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOwogbGVhdmU6CiAJaWYgKHN0YXR1cyA8IDAgJiYgZGlkX3F1b3RhX2lub2RlKQogCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CkBAIC0yMjY3LDYgKzIyNjksOCBAQAogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwogCWxlMzJfYWRkX2NwdSgmZGktPmlfZmxhZ3MsIC1PQ0ZTMl9PUlBIQU5FRF9GTCk7CiAJZGktPmlfb3JwaGFuZWRfc2xvdCA9IDA7CisJaW5vZGUtPmlfbmxpbmsgPSAxOworCW9jZnMyX3NldF9saW5rc19jb3VudChkaSwgaW5vZGUtPmlfbmxpbmspOwogCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLApAQCAtMjI4NCw3ICsyMjg4LDYgQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAotCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIAlkZW50cnktPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXN0YXR1cyA9IDA7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCmluZGV4IDMwOTY3ZTMuLjc0ZGIyYmUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiB9CiAKLXZvaWQgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPQogCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUsIHJmX2dldGNudCk7CkBAIC01MjQsMjMgKzUyNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZV9ieV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcncsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKipyZXRfdHJlZSwKLQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWZfYmgpCi17Ci0JaW50IHJldDsKLQl1NjQgcmVmX2Jsa25vOwotCi0JcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKGlub2RlLCAmcmVmX2Jsa25vKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgcmVmX2Jsa25vLAotCQkJCQlydywgcmV0X3RyZWUsIHJlZl9iaCk7Ci19Ci0KIHZvaWQgb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsIGludCBydykKIHsKQEAgLTk2OSw2ICs5NTIsMTAzIEBACiB9CiAKIC8qCisgKiBGaW5kIHRoZSBlbmQgcmFuZ2UgZm9yIGEgbGVhZiByZWZjb3VudCBibG9jayBpbmRpY2F0ZWQgYnkKKyAqIGVsLT5sX3JlY3NbaW5kZXhdLmVfYmxrbm8uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmNvdW50X2Nwb3NfZW5kKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYiwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCQkgICAgICAgaW50IGluZGV4LCAgdTMyICpjcG9zX2VuZCkKK3sKKwlpbnQgcmV0LCBpLCBzdWJ0cmVlX3Jvb3Q7CisJdTMyIGNwb3M7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMLCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqdG1wX2VsOworCisJaWYgKGluZGV4IDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYSBleHRlbnQgcmVjIGFmdGVyIGluZGV4LCBzbyBqdXN0IHVzZSB0aGUgZV9jcG9zCisJCSAqIG9mIHRoZSBuZXh0IGV4dGVudCByZWMuCisJCSAqLworCQkqY3Bvc19lbmQgPSBsZTMyX3RvX2NwdShlbC0+bF9yZWNzW2luZGV4KzFdLmVfY3Bvcyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghZWIgfHwgKGViICYmICFlYi0+aF9uZXh0X2xlYWZfYmxrKSkgeworCQkvKgorCQkgKiBXZSBhcmUgdGhlIGxhc3QgZXh0ZW50IHJlYywgc28gYW55IGhpZ2ggY3BvcyBzaG91bGQKKwkJICogYmUgc3RvcmVkIGluIHRoaXMgbGVhZiByZWZjb3VudCBibG9jay4KKwkJICovCisJCSpjcG9zX2VuZCA9IFVJTlRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBleHRlbnQgYmxvY2sgaXNuJ3QgdGhlIGxhc3Qgb25lLCB3ZSBoYXZlIHRvIGZpbmQKKwkgKiB0aGUgc3VidHJlZSByb290IGJldHdlZW4gdGhpcyBleHRlbnQgYmxvY2sgYW5kIHRoZSBuZXh0CisJICogbGVhZiBleHRlbnQgYmxvY2sgYW5kIGdldCB0aGUgY29ycmVzcG9uZGluZyBlX2Nwb3MgZnJvbQorCSAqIHRoZSBzdWJyb290LiBPdGhlcndpc2Ugd2UgbWF5IGNvcnJ1cHQgdGhlIGItdHJlZS4KKwkgKi8KKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgY2ksIHJlZl9yb290X2JoKTsKKworCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoJmV0KTsKKwlpZiAoIWxlZnRfcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWNwb3MgPSBsZTMyX3RvX2NwdShlYi0+aF9saXN0LmxfcmVjc1tpbmRleF0uZV9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIGxlZnRfcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgobGVmdF9wYXRoKTsKKwlpZiAoIXJpZ2h0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc2IsIGxlZnRfcGF0aCwgJmNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIHJpZ2h0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzdWJ0cmVlX3Jvb3QgPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdCgmZXQsIGxlZnRfcGF0aCwKKwkJCQkJICAgICAgIHJpZ2h0X3BhdGgpOworCisJdG1wX2VsID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9yb290XS5lbDsKKwlibGtubyA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfcm9vdCsxXS5iaC0+Yl9ibG9ja25yOworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdSh0bXBfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykgeworCQlpZiAobGU2NF90b19jcHUodG1wX2VsLT5sX3JlY3NbaV0uZV9ibGtubykgPT0gYmxrbm8pIHsKKwkJCSpjcG9zX2VuZCA9IGxlMzJfdG9fY3B1KHRtcF9lbC0+bF9yZWNzW2krMV0uZV9jcG9zKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJQlVHX09OKGkgPT0gbGUzMl90b19jcHUodG1wX2VsLT5sX25leHRfZnJlZV9yZWMpKTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCW9jZnMyX2ZyZWVfcGF0aChyaWdodF9wYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogR2l2ZW4gYSBjcG9zIGFuZCBsZW4sIHRyeSB0byBmaW5kIHRoZSByZWZjb3VudCByZWNvcmQgd2hpY2ggY29udGFpbnMgY3Bvcy4KICAqIDEuIElmIGNwb3MgY2FuIGJlIGZvdW5kIGluIG9uZSByZWZjb3VudCByZWNvcmQsIHJldHVybiB0aGUgcmVjb3JkLgogICogMi4gSWYgY3BvcyBjYW4ndCBiZSBmb3VuZCwgcmV0dXJuIGEgZmFrZSByZWNvcmQgd2hpY2ggc3RhcnQgZnJvbSBjcG9zCkBAIC05ODMsMTAgKzEwNjMsMTAgQEAKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCkKIHsKIAlpbnQgcmV0ID0gMCwgaSwgZm91bmQ7Ci0JdTMyIGxvd19jcG9zOworCXUzMiBsb3dfY3BvcywgdW5pbml0aWFsaXplZF92YXIoY3Bvc19lbmQpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnRtcCwgKnJlYyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWIgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMLCAqcmVmX2xlYWZfYmggPSBOVUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOwogCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQpAQCAtMTAzNCwxMiArMTExNCwxNiBAQAogCQl9CiAJfQogCi0JLyogYWRqdXN0IGxlbiB3aGVuIHdlIGhhdmUgb2NmczJfZXh0ZW50X3JlYyBhZnRlciBpdC4gKi8KLQlpZiAoZm91bmQgJiYgaSA8IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMSkgewotCQl0bXAgPSAmZWwtPmxfcmVjc1tpKzFdOworCWlmIChmb3VuZCkgeworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfY3Bvc19lbmQoY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICBlYiwgZWwsIGksICZjcG9zX2VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQkJaWYgKGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSA8IGNwb3MgKyBsZW4pCi0JCQlsZW4gPSBsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgLSBjcG9zOworCQlpZiAoY3Bvc19lbmQgPCBsb3dfY3BvcyArIGxlbikKKwkJCWxlbiA9IGNwb3NfZW5kIC0gbG93X2Nwb3M7CiAJfQogCiAJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jayhjaSwgbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSwKQEAgLTE0MTgsNyArMTUwMiw3IEBACiAKIAkvKiBjaGFuZ2Ugb2xkIGFuZCBuZXcgcmxfdXNlZCBhY2NvcmRpbmdseS4gKi8KIAlsZTE2X2FkZF9jcHUoJnJsLT5ybF91c2VkLCAtbnVtX21vdmVkKTsKLQluZXdfcmwtPnJsX3VzZWQgPSBjcHVfdG9fbGUzMihudW1fbW92ZWQpOworCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTE2KG51bV9tb3ZlZCk7CiAKIAlzb3J0KCZybC0+cmxfcmVjcywgbGUxNl90b19jcHUocmwtPnJsX3VzZWQpLAogCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpLApAQCAtMTc5Nyw3ICsxODgxLDggQEAKIAkJcmVjc19uZWVkKys7CiAKIAkvKiBJZiB0aGUgbGVhZiBibG9jayBkb24ndCBoYXZlIGVub3VnaCByZWNvcmQsIGV4cGFuZCBpdC4gKi8KLQlpZiAobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgKyByZWNzX25lZWQgPiByZl9saXN0LT5ybF9jb3VudCkgeworCWlmIChsZTE2X3RvX2NwdShyZl9saXN0LT5ybF91c2VkKSArIHJlY3NfbmVlZCA+CisJCQkJCSBsZTE2X3RvX2NwdShyZl9saXN0LT5ybF9jb3VudCkpIHsKIAkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB0bXBfcmVjOwogCQl1NjQgY3BvcyA9IGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpOwogCQlsZW4gPSBsZTMyX3RvX2NwdShvcmlnX3JlYy0+cl9jbHVzdGVycyk7CkBAIC0xODU5LDcgKzE5NDQsNyBAQAogCQltZW1jcHkodGFpbF9yZWMsIG9yaWdfcmVjLCBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYykpOwogCQlsZTY0X2FkZF9jcHUoJnRhaWxfcmVjLT5yX2Nwb3MsCiAJCQkgICAgIGxlMzJfdG9fY3B1KHRhaWxfcmVjLT5yX2NsdXN0ZXJzKSAtIGxlbik7Ci0JCXRhaWxfcmVjLT5yX2NsdXN0ZXJzID0gbGUzMl90b19jcHUobGVuKTsKKwkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihsZW4pOwogCX0KIAogCS8qCkBAIC0zODQwLDggKzM5MjUsNyBAQAogCX0KIAogCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCBldCwgY3BvcywKLQkJCWNwdV90b19sZTY0KG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKLQkJCQkJCQkgICAgIHBfY2x1c3RlcikpLAorCQkJb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwX2NsdXN0ZXIpLAogCQkJbnVtX2NsdXN0ZXJzLCBleHRfZmxhZ3MsIG1ldGFfYWMpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDI1Myw4ICs0MzM3LDggQEAKICAqIEBuZXdfZGVudHJ5OiAgICAgICAgdGFyZ2V0IGRlbnRyeQogICogQHByZXNlcnZlOiAgaWYgdHJ1ZSwgcHJlc2VydmUgYWxsIGZpbGUgYXR0cmlidXRlcwogICovCi1pbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpCitzdGF0aWMgaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBjYTY5MjQxLi4wNDBjZWY3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC04MjEsMTUgKzgyMSwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGUgKl9fZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZiwKKwkJCQkJc3RydWN0IGZpbGUgKmYsCiAJCQkJCWludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSwKIAkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlmLT5mX2ZsYWdzID0gZmxhZ3M7Ci0JZi0+Zl9tb2RlID0gKF9fZm9yY2UgZm1vZGVfdCkoKGZsYWdzKzEpICYgT19BQ0NNT0RFKSB8IEZNT0RFX0xTRUVLIHwKKwlmLT5mX21vZGUgPSBPUEVOX0ZNT0RFKGYtPmZfZmxhZ3MpIHwgRk1PREVfTFNFRUsgfAogCQkJCUZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpAQCAtOTMwLDcgKzkyOSw2IEBACiAJaWYgKElTX0VSUihkZW50cnkpKQogCQlnb3RvIG91dF9lcnI7CiAJbmQtPmludGVudC5vcGVuLmZpbGUgPSBfX2RlbnRyeV9vcGVuKGRnZXQoZGVudHJ5KSwgbW50Z2V0KG5kLT5wYXRoLm1udCksCi0JCQkJCSAgICAgbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMSwKIAkJCQkJICAgICBuZC0+aW50ZW50Lm9wZW4uZmlsZSwKIAkJCQkJICAgICBvcGVuLCBjcmVkKTsKIG91dDoKQEAgLTk0OSw3ICs5NDcsNyBAQAogICoKICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBvcmlnaW5hbCBuYW1laWRhdGEKICAqLwotc3RydWN0IGZpbGUgKm5hbWVpZGF0YV90b19maWxwKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpCitzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKQEAgLTk1OCw3ICs5NTYsNyBAQAogCWZpbHAgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKIAkvKiBIYXMgdGhlIGZpbGVzeXN0ZW0gaW5pdGlhbGlzZWQgdGhlIGZpbGUgZm9yIHVzPyAqLwogCWlmIChmaWxwLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCWZpbHAgPSBfX2RlbnRyeV9vcGVuKG5kLT5wYXRoLmRlbnRyeSwgbmQtPnBhdGgubW50LCBmbGFncywgZmlscCwKKwkJZmlscCA9IF9fZGVudHJ5X29wZW4obmQtPnBhdGguZGVudHJ5LCBuZC0+cGF0aC5tbnQsIGZpbHAsCiAJCQkJICAgICBOVUxMLCBjcmVkKTsKIAllbHNlCiAJCXBhdGhfcHV0KCZuZC0+cGF0aCk7CkBAIC05OTcsNyArOTk1LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCX0KIAotCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmbGFncywgZiwgTlVMTCwgY3JlZCk7CisJZi0+Zl9mbGFncyA9IGZsYWdzOworCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmLCBOVUxMLCBjcmVkKTsKIH0KIEVYUE9SVF9TWU1CT0woZGVudHJ5X29wZW4pOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNGJhZGRlMS4uZjU2MDMyNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMTM0LDEzICsxMzQsMTYgQEAKICAqIHNpbXBsZSBiaXQgdGVzdHMuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0YXNrX3N0YXRlX2FycmF5W10gPSB7Ci0JIlIgKHJ1bm5pbmcpIiwJCS8qICAwICovCi0JIlMgKHNsZWVwaW5nKSIsCQkvKiAgMSAqLwotCSJEIChkaXNrIHNsZWVwKSIsCS8qICAyICovCi0JIlQgKHN0b3BwZWQpIiwJCS8qICA0ICovCi0JIlQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgOCAqLwotCSJaICh6b21iaWUpIiwJCS8qIDE2ICovCi0JIlggKGRlYWQpIgkJLyogMzIgKi8KKwkiUiAocnVubmluZykiLAkJLyogICAwICovCisJIlMgKHNsZWVwaW5nKSIsCQkvKiAgIDEgKi8KKwkiRCAoZGlzayBzbGVlcCkiLAkvKiAgIDIgKi8KKwkiVCAoc3RvcHBlZCkiLAkJLyogICA0ICovCisJInQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgIDggKi8KKwkiWiAoem9tYmllKSIsCQkvKiAgMTYgKi8KKwkiWCAoZGVhZCkiLAkJLyogIDMyICovCisJInggKGRlYWQpIiwJCS8qICA2NCAqLworCSJLICh3YWtla2lsbCkiLAkJLyogMTI4ICovCisJIlcgKHdha2luZykiLAkJLyogMjU2ICovCiB9OwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF90YXNrX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTQ4LDYgKzE1MSw4IEBACiAJdW5zaWduZWQgaW50IHN0YXRlID0gKHRzay0+c3RhdGUgJiBUQVNLX1JFUE9SVCkgfCB0c2stPmV4aXRfc3RhdGU7CiAJY29uc3QgY2hhciAqKnAgPSAmdGFza19zdGF0ZV9hcnJheVswXTsKIAorCUJVSUxEX0JVR19PTigxICsgaWxvZzIoVEFTS19TVEFURV9NQVgpICE9IEFSUkFZX1NJWkUodGFza19zdGF0ZV9hcnJheSkpOworCiAJd2hpbGUgKHN0YXRlKSB7CiAJCXArKzsKIAkJc3RhdGUgPj49IDE7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCBjZDZiYjlhLi5kZWE4NmFiIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTMyMyw2ICszMjMsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7CiAKKy8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCitzdGF0aWMgaW5saW5lIGludCBtYXJrX2FsbF9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3QpCit7CisJaW50IHJldCwgZXJyLCBjbnQ7CisKKwlyZXQgPSBlcnIgPSAwOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoZHF1b3RbY250XSkKKwkJCS8qIEV2ZW4gaW4gY2FzZSBvZiBlcnJvciB3ZSBoYXZlIHRvIGNvbnRpbnVlICovCisJCQlyZXQgPSBtYXJrX2RxdW90X2RpcnR5KGRxdW90W2NudF0pOworCQlpZiAoIWVycikKKwkJCWVyciA9IHJldDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxcHV0X2FsbChzdHJ1Y3QgZHF1b3QgKipkcXVvdCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlkcXB1dChkcXVvdFtjbnRdKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBuZWVkcyBkcV9saXN0X2xvY2sgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNsZWFyX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CkBAIC0xMjY4LDggKzEyOTIsNyBAQAogb3V0X2VycjoKIAl1cF93cml0ZSgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwogCS8qIERyb3AgdW51c2VkIHJlZmVyZW5jZXMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWRxcHV0KGdvdFtjbnRdKTsKKwlkcXB1dF9hbGwoZ290KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9pbml0aWFsaXplKTsKQEAgLTEyODgsOSArMTMxMSw3IEBACiAJCWlub2RlLT5pX2RxdW90W2NudF0gPSBOVUxMOwogCX0KIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChwdXRbY250XSk7CisJZHFwdXRfYWxsKHB1dCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2Ryb3ApOwpAQCAtMTMxOSw2ICsxMzQwLDY3IEBACiBFWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKIAogLyoKKyAqIGlub2RlX3Jlc2VydmVkX3NwYWNlIGlzIG1hbmFnZWQgaW50ZXJuYWxseSBieSBxdW90YSwgYW5kIHByb3RlY3RlZCBieQorICogaV9sb2NrIHNpbWlsYXIgdG8gaV9ibG9ja3MraV9ieXRlcy4KKyAqLworc3RhdGljIHFzaXplX3QgKmlub2RlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQoreworCS8qIEZpbGVzeXN0ZW0gbXVzdCBleHBsaWNpdGx5IGRlZmluZSBpdCdzIG93biBtZXRob2QgaW4gb3JkZXIgdG8gdXNlCisJICogcXVvdGEgcmVzZXJ2YXRpb24gaW50ZXJmYWNlICovCisJQlVHX09OKCFpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZSk7CisJcmV0dXJuIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgaW5vZGVfYWRkX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCSppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSkgKz0gbnVtYmVyOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworCitzdGF0aWMgdm9pZCBpbm9kZV9jbGFpbV9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlfX2lub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX3N1Yl9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyBxc2l6ZV90IGlub2RlX2dldF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlxc2l6ZV90IHJldDsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXJldCA9ICppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2luY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCQkJaW50IHJlc2VydmUpCit7CisJaWYgKHJlc2VydmUpCisJCWlub2RlX2FkZF9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CisJZWxzZQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2RlY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQoreworCWlmIChyZXNlcnZlKQorCQlpbm9kZV9zdWJfcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOworCWVsc2UKKwkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworfQorCisvKgogICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKICAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKICAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCkBAIC0xMzM2LDYgKzE0MTgsMjEgQEAKIAlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKKwkvKgorCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAorCSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9pbmNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKIApAQCAtMTM0Niw3ICsxNDQzLDggQEAKIAkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkKIAkJICAgID09IE5PX1FVT1RBKSB7CiAJCQlyZXQgPSBOT19RVU9UQTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCQkJZ290byBvdXRfZmx1c2hfd2FybjsKIAkJfQogCX0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTEzNTcsNjQgKzE0NTUsMjkgQEAKIAkJZWxzZQogCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KLQlpZiAoIXJlc2VydmUpCi0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLW91dF91bmxvY2s6CisJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF9mbHVzaF93YXJuOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKK291dF9mbHVzaF93YXJuOgogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQogewotCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwotCi0JLyoKLQkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLQkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKLQkgKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKLQlpZiAocmV0ID09IE5PX1FVT1RBKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotb3V0X3VubG9jazoKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwogCiBpbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCiB7Ci0JaW50IHJldCA9IFFVT1RBX09LOwotCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAxKTsKLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOwogCkBAIC0xNDU1LDEwICsxNTE4LDcgQEAKIHdhcm5fcHV0X2FsbDoKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAocmV0ID09IFFVT1RBX09LKQotCQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCQltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKQEAgLTE0NzEsMTQgKzE1MzEsMTQgQEAKIAlpbnQgcmV0ID0gUVVPVEFfT0s7CiAKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkJewogCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0OTAsMTIgKzE1NTAsOSBAQAogCQkJCQkJCW51bWJlcik7CiAJfQogCS8qIFVwZGF0ZSBpbm9kZSBieXRlcyAqLwotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xNTAzLDM4ICsxNTYwLDkgQEAKIEVYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOwogCiAvKgotICogUmVsZWFzZSByZXNlcnZlZCBxdW90YSBzcGFjZQotICovCi12b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCi17Ci0JaW50IGNudDsKLQotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXQ7Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBSZWxlYXNlIHJlc2VydmVkIGRxdW90cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0KLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybjsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7Ci0KLS8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCi1pbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK2ludCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCBjbnQ7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwpAQCAtMTU0Myw3ICsxNTcxLDcgQEAKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CiBvdXRfc3ViOgotCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJCXJldHVybiBRVU9UQV9PSzsKIAl9CiAKQEAgLTE1NTgsMjEgKzE1ODYsNDAgQEAKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7CiAJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJaWYgKHJlc2VydmUpCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWVsc2UKKwkJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9Ci0JaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF91bmxvY2s7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOworb3V0X3VubG9jazoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CiB9CisKK2ludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXJldHVybiAgX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBudW1iZXIsIDApOworfQogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKIAogLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCV9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAxKTsKKworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKTsKKworLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KIGludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQpAQCAtMTU5OSwxMCArMTY0Niw3IEBACiAJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJfQogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiBRVU9UQV9PSzsKQEAgLTE2MTAsMTkgKzE2NTQsNiBAQAogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKIAogLyoKLSAqIGNhbGwgYmFjayBmdW5jdGlvbiwgZ2V0IHJlc2VydmVkIHF1b3RhIHNwYWNlIGZyb20gdW5kZXJseWluZyBmcwotICovCi1xc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXFzaXplX3QgcmVzZXJ2ZWRfc3BhY2UgPSAwOwotCi0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmCi0JICAgIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQotCQlyZXNlcnZlZF9zcGFjZSA9IGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKLQlyZXR1cm4gcmVzZXJ2ZWRfc3BhY2U7Ci19Ci0KLS8qCiAgKiBUcmFuc2ZlciB0aGUgbnVtYmVyIG9mIGlub2RlIGFuZCBibG9ja3MgZnJvbSBvbmUgZGlza3F1b3RhIHRvIGFuIG90aGVyLgogICoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCkBAIC0xNjY1LDcgKzE2OTYsNyBAQAogCX0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJY3VyX3NwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKLQlyc3Zfc3BhY2UgPSBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJzdl9zcGFjZSA9IGlub2RlX2dldF9yc3Zfc3BhY2UoaW5vZGUpOwogCXNwYWNlID0gY3VyX3NwYWNlICsgcnN2X3NwYWNlOwogCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTE3MDksMjUgKzE3NDAsMTggQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCi0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJaWYgKHRyYW5zZmVyX3RvW2NudF0pIHsKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfdG9bY250XSk7Ci0JCQkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KLQkJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwotCQl9Ci0JfQorCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb20pOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvKTsKKwkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwogd2Fybl9wdXRfYWxsOgogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX3RvLCB3YXJudHlwZV90byk7CiAJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9pbm9kZXMpOwogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21fc3BhY2UpOwogcHV0X2FsbDoKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJZHFwdXQodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJZHFwdXQodHJhbnNmZXJfdG9bY250XSk7Ci0JfQorCWRxcHV0X2FsbCh0cmFuc2Zlcl9mcm9tKTsKKwlkcXB1dF9hbGwodHJhbnNmZXJfdG8pOwogCXJldHVybiByZXQ7CiBvdmVyX3F1b3RhOgogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKaW5kZXggM2RmYzIzZS4uZTNkYTAyZjQgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMKKysrIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwpAQCAtOTcsOCArOTcsMTEgQEAKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKIAogCWlmICghdjJfcmVhZF9oZWFkZXIoc2IsIHR5cGUsICZkcWhlYWQpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC0xOwogCXZlcnNpb24gPSBsZTMyX3RvX2NwdShkcWhlYWQuZHFoX3ZlcnNpb24pOworCWlmICgoaW5mby0+ZHFpX2ZtdF9pZCA9PSBRRk1UX1ZGU19WMCAmJiB2ZXJzaW9uICE9IDApIHx8CisJICAgIChpbmZvLT5kcWlfZm10X2lkID09IFFGTVRfVkZTX1YxICYmIHZlcnNpb24gIT0gMSkpCisJCXJldHVybiAtMTsKIAogCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZGluZm8sCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpOwpAQCAtMTIwLDggKzEyMyw4IEBACiAJCWluZm8tPmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7CiAJCS8qIHVzZWQgc3BhY2UgaXMgc3RvcmVkIGFzIHVuc2lnbmVkIDY0LWJpdCB2YWx1ZSAqLwotCQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmOwkvKiAyXjY0LTEgKi8KLQkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKwkJaW5mby0+ZHFpX21heGJsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsJLyogMl42NC0xICovCisJCWluZm8tPmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmZVTEw7CiAJfQogCWluZm8tPmRxaV9iZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmdyYWNlKTsKIAlpbmZvLT5kcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7CmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuYwppbmRleCBiMDc1NjVjLi4xZGFiZTRlIDEwMDY0NAotLS0gYS9mcy9zaWduYWxmZC5jCisrKyBiL2ZzL3NpZ25hbGZkLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQkgKiBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBpbnN0YWxsIHRoZSBmZC4KIAkJICovCiAJCXVmZCA9IGFub25faW5vZGVfZ2V0ZmQoIltzaWduYWxmZF0iLCAmc2lnbmFsZmRfZm9wcywgY3R4LAotCQkJCSAgICAgICBmbGFncyAmIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKSk7CisJCQkJICAgICAgIE9fUkRXUiB8IChmbGFncyAmIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKSkpOwogCQlpZiAodWZkIDwgMCkKIAkJCWtmcmVlKGN0eCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3N0YXQuYyBiL2ZzL3N0YXQuYwppbmRleCAwNzU2OTRlLi5jNGVjZDUyIDEwMDY0NAotLS0gYS9mcy9zdGF0LmMKKysrIGIvZnMvc3RhdC5jCkBAIC00MDEsOSArNDAxLDkgQEAKIH0KICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TVEFUNjQgKi8KIAotdm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQorLyogQ2FsbGVyIGlzIGhlcmUgcmVzcG9uc2libGUgZm9yIHN1ZmZpY2llbnQgbG9ja2luZyAoaWUuIGlub2RlLT5pX2xvY2spICovCit2b2lkIF9faW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcykKIHsKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWlub2RlLT5pX2Jsb2NrcyArPSBieXRlcyA+PiA5OwogCWJ5dGVzICY9IDUxMTsKIAlpbm9kZS0+aV9ieXRlcyArPSBieXRlczsKQEAgLTQxMSw2ICs0MTEsMTIgQEAKIAkJaW5vZGUtPmlfYmxvY2tzKys7CiAJCWlub2RlLT5pX2J5dGVzIC09IDUxMjsKIAl9Cit9CisKK3ZvaWQgaW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcykKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCV9faW5vZGVfYWRkX2J5dGVzKGlub2RlLCBieXRlcyk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAxOWViNzBiLi5hZmYwNDZiIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTkwMSw4ICs5MDEsOSBAQAogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOworCX0gZWxzZSB7CisJCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwogCX0KLQlkb19yZW1vdW50X3NiKHMsIGZsYWdzLCBkYXRhLCAwKTsKIAlzaW1wbGVfc2V0X21udChtbnQsIHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCA2MGM3MDJiLi5hMGE1MDBhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNDgzLDcgKzQ4Myw4IEBACiAgKglAYXR0cjoJYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KIAotaW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK2ludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCUJVR19PTigha29iaiB8fCAha29iai0+c2QgfHwgIWF0dHIpOwogCkBAIC00OTcsNyArNDk4LDggQEAKICAqCUBhdHRyOglhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogCi12b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK3ZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGtvYmotPnNkLCBhdHRyLT5hdHRyLm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvdGltZXJmZC5jIGIvZnMvdGltZXJmZC5jCmluZGV4IGIwNDJiZDcuLjFiZmM5NWEgMTAwNjQ0Ci0tLSBhL2ZzL3RpbWVyZmQuYworKysgYi9mcy90aW1lcmZkLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGNsb2NraWQsIEhSVElNRVJfTU9ERV9BQlMpOwogCiAJdWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW3RpbWVyZmRdIiwgJnRpbWVyZmRfZm9wcywgY3R4LAotCQkJICAgICAgIGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkgICAgICAgT19SRFdSIHwgKGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUykpOwogCWlmICh1ZmQgPCAwKQogCQlrZnJlZShjdHgpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMTllZjhlYi4uNzFkYWZiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lCURSTV9NQVNURVIJMHgyCiAjZGVmaW5lIERSTV9ST09UX09OTFkJMHg0CiAjZGVmaW5lIERSTV9DT05UUk9MX0FMTE9XIDB4OAorI2RlZmluZSBEUk1fVU5MT0NLRUQJMHgxMAogCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgewogCXVuc2lnbmVkIGludCBjbWQ7CkBAIC0xMTI4LDggKzExMjksOCBAQAogCQkJCS8qIERyaXZlciBzdXBwb3J0IChkcm1fZHJ2LmgpICovCiBleHRlcm4gaW50IGRybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIHZvaWQgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50IGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gbG9uZyBkcm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBsb25nIGRybV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKaW5kZXggMTJmZjhjMy4uNTAzMmI5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAl2b2lkICpwOwogCiAJaWYgKHNpemUgPCAwKQotCQllcnJvcigiTWFsbG9jIGVycm9yIik7CisJCXJldHVybiBOVUxMOwogCWlmICghbWFsbG9jX3B0cikKIAkJbWFsbG9jX3B0ciA9IGZyZWVfbWVtX3B0cjsKIApAQCAtMzUsNyArMzUsNyBAQAogCW1hbGxvY19wdHIgKz0gc2l6ZTsKIAogCWlmIChmcmVlX21lbV9lbmRfcHRyICYmIG1hbGxvY19wdHIgPj0gZnJlZV9tZW1fZW5kX3B0cikKLQkJZXJyb3IoIk91dCBvZiBtZW1vcnkiKTsKKwkJcmV0dXJuIE5VTEw7CiAKIAltYWxsb2NfY291bnQrKzsKIAlyZXR1cm4gcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDJhNzNkOWIuLmE2Mjc5OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTY2LDkgKzE2Niw5IEBACiAJX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKIAogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCi0JCQkJCSAgIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKKwkJCQkJY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIHZvaWQgZHJpdmVyX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCi0JCQkgICAgICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKIAogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZHJpdmVyX2FkZF9rb2JqKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCiAJCQkJCXN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtMzE5LDEzICszMTksMTMgQEAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQogCiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZW50cnkpOworCQkJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZW50cnkpOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJCWNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiB2b2lkIGRldmljZV9yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gaW50IGRldmljZV9zY2hlZHVsZV9jYWxsYmFja19vd25lcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgZGV2aWNlICpkZXYpLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHN0LmggYi9pbmNsdWRlL2xpbnV4L2RzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjZmZWQ4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODcgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX19EU1RfSAotI2RlZmluZSBfX0RTVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgotCi0jZGVmaW5lIERTVF9OQU1FTEVOCQkzMgotI2RlZmluZSBEU1RfTkFNRQkJImRzdCIKLQotZW51bSB7Ci0JLyogUmVtb3ZlIG5vZGUgd2l0aCBnaXZlbiBpZCBmcm9tIHN0b3JhZ2UgKi8KLQlEU1RfREVMX05PREUJPSAwLAotCS8qIEFkZCByZW1vdGUgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlICovCi0JRFNUX0FERF9SRU1PVEUsCi0JLyogQWRkIGxvY2FsIG5vZGUgd2l0aCBnaXZlbiBpZCB0byB0aGUgc3RvcmFnZSB0byBiZSBleHBvcnRlZCBhbmQgdXNlZCBieSByZW1vdGUgcGVlcnMgKi8KLQlEU1RfQUREX0VYUE9SVCwKLQkvKiBDcnlwdG8gaW5pdGlhbGl6YXRpb24gY29tbWFuZCAoaGFzaC9jaXBoZXIgdXNlZCB0byBwcm90ZWN0IHRoZSBjb25uZWN0aW9uKSAqLwotCURTVF9DUllQVE8sCi0JLyogU2VjdXJpdHkgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gY29ubmVjdGlvbiAocGVybWlzc2lvbnMgZm9yIGV4YW1wbGUpICovCi0JRFNUX1NFQ1VSSVRZLAotCS8qIFJlZ2lzdGVyIGdpdmVuIG5vZGUgaW4gdGhlIGJsb2NrIGxheWVyIHN1YnN5c3RlbSAqLwotCURTVF9TVEFSVCwKLQlEU1RfQ01EX01BWAotfTsKLQotc3RydWN0IGRzdF9jdGwKLXsKLQkvKiBTdG9yYWdlIG5hbWUgKi8KLQljaGFyCQkJbmFtZVtEU1RfTkFNRUxFTl07Ci0JLyogQ29tbWFuZCBmbGFncyAqLwotCV9fdTMyCQkJZmxhZ3M7Ci0JLyogQ29tbWFuZCBpdHNlbGYgKHNlZSBhYm92ZSkgKi8KLQlfX3UzMgkJCWNtZDsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBwZXIgc2luZ2xlIHJlcXVlc3QgaW4gdGhpcyBkZXZpY2UgKi8KLQlfX3UzMgkJCW1heF9wYWdlczsKLQkvKiBTdGFsZS9lcnJvciB0cmFuc2FjdGlvbiBzY2FubmluZyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLwotCV9fdTMyCQkJdHJhbnNfc2Nhbl90aW1lb3V0OwotCS8qIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IHNlbmRzIGJlZm9yZSBjb21wbGV0aW5nIHRyYW5zYWN0aW9uIGFzIGJyb2tlbiAqLwotCV9fdTMyCQkJdHJhbnNfbWF4X3JldHJpZXM7Ci0JLyogU3RvcmFnZSBzaXplICovCi0JX191NjQJCQlzaXplOwotfTsKLQotLyogUmVwbHkgY29tbWFuZCBjYXJyaWVzIGNvbXBsZXRpb24gc3RhdHVzICovCi1zdHJ1Y3QgZHN0X2N0bF9hY2sKLXsKLQlzdHJ1Y3QgY25fbXNnCQltc2c7Ci0JaW50CQkJZXJyb3I7Ci0JaW50CQkJdW51c2VkWzNdOwotfTsKLQotLyoKLSAqIFVuZm9ydHVuYWx0ZWx5IHNvY2tldCBhZGRyZXNzIHN0cnVjdHVyZSBpcyBub3QgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlCi0gKiBhbmQgaXMgcmVkZWZpbmVkIHRoZXJlLgotICovCi0jZGVmaW5lIFNBRERSX01BWF9EQVRBCTEyOAotCi1zdHJ1Y3Qgc2FkZHIgewotCS8qIGFkZHJlc3MgZmFtaWx5LCBBRl94eHgJKi8KLQl1bnNpZ25lZCBzaG9ydAkJc2FfZmFtaWx5OwotCS8qIDE0IGJ5dGVzIG9mIHByb3RvY29sIGFkZHJlc3MJKi8KLQljaGFyCQkJc2FfZGF0YVtTQUREUl9NQVhfREFUQV07Ci0JLyogTnVtYmVyIG9mIGJ5dGVzIHVzZWQgaW4gc2FfZGF0YSAqLwotCXVuc2lnbmVkIHNob3J0CQlzYV9kYXRhX2xlbjsKLX07Ci0KLS8qIEFkZHJlc3Mgc3RydWN0dXJlICovCi1zdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCi17Ci0JLyogU29ja2V0IHR5cGU6IGRhdGFncmFtLCBzdHJlYW0uLi4qLwotCXVuc2lnbmVkIGludAkJdHlwZTsKLQkvKiBMZXQgbWUgZ3Vlc3MsIGlzIGl0IGEgSnVwaXRlciBkaWFtZXRlcj8gKi8KLQl1bnNpZ25lZCBpbnQJCXByb3RvOwotCS8qIFBlZXIncyBhZGRyZXNzICovCi0Jc3RydWN0IHNhZGRyCQlhZGRyOwotfTsKLQotc3RydWN0IGRzdF9jcnlwdG9fY3RsCi17Ci0JLyogQ2lwaGVyIGFuZCBoYXNoIG5hbWVzICovCi0JY2hhcgkJCWNpcGhlcl9hbGdvW0RTVF9OQU1FTEVOXTsKLQljaGFyCQkJaGFzaF9hbGdvW0RTVF9OQU1FTEVOXTsKLQotCS8qIEtleSBzaXplcy4gQ2FuIGJlIHplcm8gZm9yIGRpZ2VzdCBmb3IgZXhhbXBsZSAqLwotCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemUsIGhhc2hfa2V5c2l6ZTsKLQkvKiBBbGlnbm1lbnQuIENhbGN1bGF0ZWQgYnkgdGhlIERTVCBpdHNlbGYuICovCi0JdW5zaWduZWQgaW50CQljcnlwdG9fYXR0YWNoZWRfc2l6ZTsKLQkvKiBOdW1iZXIgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBvcGVyYXRpb25zICovCi0JaW50CQkJdGhyZWFkX251bTsKLX07Ci0KLS8qIEV4cG9ydCBzZWN1cml0eSBhdHRyaWJ1dGVzIGhhdmUgdGhpcyBiaXRzIGNoZWNrZWQgaW4gd2hlbiBjbGllbnQgY29ubmVjdHMgKi8KLSNkZWZpbmUgRFNUX1BFUk1fUkVBRAkJKDE8PDApCi0jZGVmaW5lIERTVF9QRVJNX1dSSVRFCQkoMTw8MSkKLQotLyoKLSAqIFJpZ2h0IG5vdyBpdCBpcyBzaW1wbGUgbW9kZWwsIHdoZXJlIGVhY2ggcmVtb3RlIGFkZHJlc3MKLSAqIGlzIGFzc2lnbmVkIHRvIHNldCBvZiBwZXJtaXNzaW9ucyBpdCBpcyBhbGxvd2VkIHRvIHBlcmZvcm0uCi0gKiBJbiByZWFsIHdvcmxkIGJsb2NrIGRldmljZSBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGJ1dAotICogcmVhZGluZyBhbmQgd3JpdGluZywgc28gaXQgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2guCi0gKi8KLXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIKLXsKLQl1bnNpZ25lZCBpbnQJCXBlcm1pc3Npb25zOwotCXN0cnVjdCBzYWRkcgkJYWRkcjsKLX07Ci0KLS8qCi0gKiBFeHBvcnQgY29udHJvbCBjb21tYW5kOiBkZXZpY2UgdG8gZXhwb3J0IGFuZCBuZXR3b3JrIGFkZHJlc3MgdG8gYWNjZXB0Ci0gKiBjbGllbnRzIHRvIHdvcmsgd2l0aCBnaXZlbiBkZXZpY2UKLSAqLwotc3RydWN0IGRzdF9leHBvcnRfY3RsCi17Ci0JY2hhcgkJCWRldmljZVtEU1RfTkFNRUxFTl07Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7Ci19OwotCi1lbnVtIHsKLQlEU1RfQ0ZHCT0gMSwgCQkvKiBSZXF1ZXN0IHJlbW90ZSBjb25maWd1cmF0aW9uICovCi0JRFNUX0lPLAkJCS8qIElPIGNvbW1hbmQgKi8KLQlEU1RfSU9fUkVTUE9OU0UsCS8qIElPIHJlc3BvbnNlICovCi0JRFNUX1BJTkcsCQkvKiBLZWVwYWxpdmUgbWVzc2FnZSAqLwotCURTVF9OQ01EX01BWCwKLX07Ci0KLXN0cnVjdCBkc3RfY21kCi17Ci0JLyogTmV0d29yayBjb21tYW5kIGl0c2VsZiwgc2VlIGFib3ZlICovCi0JX191MzIJCQljbWQ7Ci0JLyoKLQkgKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhCi0JICogKGluIG1vc3QgY2FzZXMsIGZvciBSRUFEIGNvbW1hbmQgaXQgbWVhbnMgaG93IG1hbnkgYnl0ZXMgd2VyZSByZXF1ZXN0ZWQpCi0JICovCi0JX191MzIJCQlzaXplOwotCS8qIENyeXB0byBzaXplOiBudW1iZXIgb2YgYXR0YWNoZWQgYnl0ZXMgd2l0aCBkaWdlc3QvaG1hYyAqLwotCV9fdTMyCQkJY3NpemU7Ci0JLyogSGVyZSB3ZSBjYW4gY2Fycnkgc2VjcmV0IGRhdGEgKi8KLQlfX3UzMgkJCXJlc2VydmVkOwotCS8qIFJlYWQvd3JpdGUgYml0cywgc2VlIGhvdyB0aGV5IGFyZSBlbmNvZGVkIGluIGJpbyBzdHJ1Y3R1cmUgKi8KLQlfX3U2NAkJCXJ3OwotCS8qIEJJTyBmbGFncyAqLwotCV9fdTY0CQkJZmxhZ3M7Ci0JLyogVW5pcXVlIGNvbW1hbmQgaWQgKGxpa2UgdHJhbnNhY3Rpb24gSUQpICovCi0JX191NjQJCQlpZDsKLQkvKiBTZWN0b3IgdG8gc3RhcnQgSU8gZnJvbSAqLwotCV9fdTY0CQkJc2VjdG9yOwotCS8qIEhhc2ggZGF0YSBpcyBwbGFjZWQgYWZ0ZXIgdGhpcyBoZWFkZXIgKi8KLQlfX3U4CQkJaGFzaFswXTsKLX07Ci0KLS8qCi0gKiBDb252ZXJ0IGNvbW1hbmQgdG8vZnJvbSBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKiBXZSBkbyBub3QgdXNlIGh0b24qKCkgZnVuY3Rpb25zLCBzaW5jZSB0aGVyZSBpcwotICogbm8gNjQtYml0IGltcGxlbWVudGF0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NvbnZlcnRfY21kKHN0cnVjdCBkc3RfY21kICpjKQotewotCWMtPmNtZCA9IF9fY3B1X3RvX2JlMzIoYy0+Y21kKTsKLQljLT5jc2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+Y3NpemUpOwotCWMtPnNpemUgPSBfX2NwdV90b19iZTMyKGMtPnNpemUpOwotCWMtPnNlY3RvciA9IF9fY3B1X3RvX2JlNjQoYy0+c2VjdG9yKTsKLQljLT5pZCA9IF9fY3B1X3RvX2JlNjQoYy0+aWQpOwotCWMtPmZsYWdzID0gX19jcHVfdG9fYmU2NChjLT5mbGFncyk7Ci0JYy0+cncgPSBfX2NwdV90b19iZTY0KGMtPnJ3KTsKLX0KLQotLyogVHJhbnNhY3Rpb24gaWQgKi8KLXR5cGVkZWYgX191NjQgZHN0X2dlbl90OwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLQotI2lmZGVmIENPTkZJR19EU1RfREVCVUcKLSNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgZiwgIyNhKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKLQlkcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fQotI2VuZGlmCi0KLXN0cnVjdCBkc3Rfbm9kZTsKLQotc3RydWN0IGRzdF90cmFucwotewotCS8qIERTVCBub2RlIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KLQlzdHJ1Y3QgZHN0X25vZGUJCSpuOwotCi0JLyogRW50cnkgaW5zaWRlIHRyYW5zYWN0aW9uIHRyZWUgKi8KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJhbnNfZW50cnk7Ci0KLQkvKiBNZXJsaW4ga2lsbHMgdGhpcyB0cmFuc2FjdGlvbiB3aGVuIHRoaXMgbWVtb3J5IGNlbGwgZXF1YWxzIHplcm8gKi8KLQlhdG9taWNfdAkJcmVmY250OwotCi0JLyogSG93IHRoaXMgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBieSBjcnlwdG8gZW5naW5lICovCi0Jc2hvcnQJCQllbmM7Ci0JLyogSG93IG1hbnkgdGltZXMgdGhpcyB0cmFuc2FjdGlvbiB3YXMgcmVzZW50ICovCi0Jc2hvcnQJCQlyZXRyaWVzOwotCS8qIENvbXBsZXRpb24gc3RhdHVzICovCi0JaW50CQkJZXJyb3I7Ci0KLQkvKiBXaGVuIGRpZCB3ZSBzZW5kIGl0IHRvIHRoZSByZW1vdGUgcGVlciAqLwotCWxvbmcJCQlzZW5kX3RpbWU7Ci0KLQkvKiBNeSBuYW1lIGlzLi4uCi0JICogV2VsbCwgY29tcHV0ZXJzIGRvZXMgbm90IHNwZWFrLCB0aGV5IGhhdmUgdW5pcXVlIGlkIGluc3RlYWQgKi8KLQlkc3RfZ2VuX3QJCWdlbjsKLQotCS8qIEJsb2NrIElPIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KLQlzdHJ1Y3QgYmlvCQkqYmlvOwotCi0JLyogTmV0d29yayBjb21tYW5kIGZvciBhYm92ZSBibG9jayBJTyByZXF1ZXN0ICovCi0Jc3RydWN0IGRzdF9jbWQJCWNtZDsKLX07Ci0KLXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZQotewotCS8qIFdoYXQgc2hvdWxkIHdlIGRvIHdpdGggYWxsIGJsb2NrIHJlcXVlc3RzICovCi0Jc3RydWN0IGNyeXB0b19oYXNoCSpoYXNoOwotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlcgkqY2lwaGVyOwotCi0JLyogUG9vbCBvZiBwYWdlcyB1c2VkIHRvIGVuY3J5cHQgZGF0YSBpbnRvIGJlZm9yZSBzZW5kaW5nICovCi0JaW50CQkJcGFnZV9udW07Ci0Jc3RydWN0IHBhZ2UJCSoqcGFnZXM7Ci0KLQkvKiBXaGF0IHRvIGRvIHdpdGggY3VycmVudCByZXF1ZXN0ICovCi0JaW50CQkJZW5jOwotCS8qIFdobyB3ZSBhcmUgYW5kIHdoZXJlIGRvIHdlIGdvICovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0CSpzcmMsICpkc3Q7Ci0KLQkvKiBNYXhpbXVtIHRpbWVvdXQgd2FpdGluZyBmb3IgZW5jcnlwdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KLQlsb25nCQkJdGltZW91dDsKLQkvKiBJViBpcyBhIDY0LWJpdCBzZXF1ZW50aWFsIGNvdW50ZXIgKi8KLQl1NjQJCQlpdjsKLQotCS8qIFNlY3JldCBkYXRhICovCi0Jdm9pZAkJCSpwcml2YXRlOwotCi0JLyogQ2FjaGVkIHRlbXBvcmFyeSBkYXRhIGxpdmVzIGhlcmUgKi8KLQlpbnQJCQlzaXplOwotCXZvaWQJCQkqZGF0YTsKLX07Ci0KLXN0cnVjdCBkc3Rfc3RhdGUKLXsKLQkvKiBUaGUgbWFpbiBzdGF0ZSBwcm90ZWN0aW9uICovCi0Jc3RydWN0IG11dGV4CQlzdGF0ZV9sb2NrOwotCi0JLyogUG9sbGluZyBtYWNoaW5lcnkgZm9yIHNvY2tldHMgKi8KLQl3YWl0X3F1ZXVlX3QgCQl3YWl0OwotCXdhaXRfcXVldWVfaGVhZF90IAkqd2hlYWQ7Ci0JLyogTW9zdCBvZiBldmVudHMgYXJlIGJlaW5nIHdhaXRlZCBoZXJlICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgCXRocmVhZF93YWl0OwotCi0JLyogV2hvIG93bnMgdGhpcz8gKi8KLQlzdHJ1Y3QgZHN0X25vZGUJCSpub2RlOwotCi0JLyogTmV0d29yayBhZGRyZXNzIGZvciB0aGlzIHN0YXRlICovCi0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7Ci0KLQkvKiBQZXJtaXNzaW9ucyB0byB3b3JrIHdpdGg6IHJlYWQtb25seSBvciBydyBjb25uZWN0aW9uICovCi0JdTMyCQkJcGVybWlzc2lvbnM7Ci0KLQkvKiBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRvIGNsZWFuIHByaXZhdGUgZGF0YSAqLwotCXZvaWQJCQkoKiBjbGVhbnVwKShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLQkvKiBVc2VkIGJ5IHRoZSBzZXJ2ZXI6IEJJTyBjb21wbGV0aW9uIHF1ZXVlcyBCSU9zIGhlcmUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlcXVlc3RfbGlzdDsKLQlzcGlubG9ja190CQlyZXF1ZXN0X2xvY2s7Ci0KLQkvKiBHdWVzcyB3aGF0PyBObywgaXQgaXMgbm90IG51bWJlciBvZiBwbGFuZXRzICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIFRoaXMgZmxhZ3MgaXMgc2V0IHdoZW4gY29ubmVjdGlvbiBzaG91bGQgYmUgZHJvcHBlZCAqLwotCWludAkJCW5lZWRfZXhpdDsKLQotCS8qCi0JICogU29ja2V0IHRvIHdvcmsgd2l0aC4gU2Vjb25kIHBvaW50ZXIgaXMgdXNlZCBmb3IKLQkgKiBsb2NrbGVzcyBjaGVjayBpZiBzb2NrZXQgd2FzIGNoYW5nZWQgYmVmb3JlIHBlcmZvcm1pbmcKLQkgKiBuZXh0IGFjdGlvbiAobGlrZSB3b3JraW5nIHdpdGggY2FjaGVkIHBvbGxpbmcgcmVzdWx0KQotCSAqLwotCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQsICpyZWFkX3NvY2tldDsKLQotCS8qIENhY2hlZCBwcmVhbGxvY2F0ZWQgZGF0YSAqLwotCXZvaWQJCQkqZGF0YTsKLQl1bnNpZ25lZCBpbnQJCXNpemU7Ci0KLQkvKiBDdXJyZW50bHkgcHJvY2Vzc2VkIGNvbW1hbmQgKi8KLQlzdHJ1Y3QgZHN0X2NtZAkJY21kOwotfTsKLQotc3RydWN0IGRzdF9pbmZvCi17Ci0JLyogRGV2aWNlIHNpemUgKi8KLQl1NjQJCQlzaXplOwotCi0JLyogTG9jYWwgZGV2aWNlIG5hbWUgZm9yIGV4cG9ydCBkZXZpY2VzICovCi0JY2hhcgkJCWxvY2FsW0RTVF9OQU1FTEVOXTsKLQotCS8qIE5ldHdvcmsgc2V0dXAgKi8KLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCW5ldDsKLQotCS8qIFN5c2ZzIGJpdHMgdXNlIHRoaXMgKi8KLQlzdHJ1Y3QgZGV2aWNlCQlkZXZpY2U7Ci19OwotCi1zdHJ1Y3QgZHN0X25vZGUKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGVfZW50cnk7Ci0KLQkvKiBIaSwgbXkgbmFtZSBpcyBzdG9yZWQgaGVyZSAqLwotCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKLQkvKiBNeSBjYWNoZSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCi0JY2hhcgkJCWNhY2hlX25hbWVbRFNUX05BTUVMRU5dOwotCi0JLyogQmxvY2sgZGV2aWNlIGF0dGFjaGVkIHRvIGdpdmVuIG5vZGUuCi0JICogT25seSB2YWxpZCBmb3IgZXhwb3J0aW5nIG5vZGVzICovCi0Jc3RydWN0IGJsb2NrX2RldmljZSAJKmJkZXY7Ci0JLyogTmV0d29yayBzdGF0ZSBtYWNoaW5lIGZvciBnaXZlbiBwZWVyICovCi0Jc3RydWN0IGRzdF9zdGF0ZQkqc3RhdGU7Ci0KLQkvKiBCbG9jayBJTyBtYWNoaW5lcnkgKi8KLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7Ci0Jc3RydWN0IGdlbmRpc2sJCSpkaXNrOwotCi0JLyogTnVtYmVyIG9mIHRocmVhZHMgaW4gcHJvY2Vzc2luZyBwb29sICovCi0JaW50CQkJdGhyZWFkX251bTsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBzaW5nbGUgSU8gKi8KLQlpbnQJCQltYXhfcGFnZXM7Ci0KLQkvKiBJJ20gdGhhdCBiaWcgaW4gYnl0ZXMgKi8KLQlsb2ZmX3QJCQlzaXplOwotCi0JLyogRXhwb3J0ZWQgdG8gdXNlcnNwYWNlIG5vZGUgaW5mb3JtYXRpb24gKi8KLQlzdHJ1Y3QgZHN0X2luZm8JCSppbmZvOwotCi0JLyoKLQkgKiBTZWN1cml0eSBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBVc2VkIG9ubHkgYnkgZXhwb3J0aW5nIG5vZGUgY3VycmVudGx5LgotCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJc2VjdXJpdHlfbGlzdDsKLQlzdHJ1Y3QgbXV0ZXgJCXNlY3VyaXR5X2xvY2s7Ci0KLQkvKgotCSAqIFdoZW4gdGhpcyB1bmVyZmxvd3MgYmVsb3cgemVybywgdW5pdmVyc2l0eSBjb2xsYXBzZXMuCi0JICogQnV0IHRoaXMgd2lsbCBub3QgaGFwcGVuLCBzaW5jZSBub2RlIHdpbGwgYmUgZnJlZWQsCi0JICogd2hlbiByZWZlcmVuY2UgY291bnRlciByZWFjaGVzIHplcm8uCi0JICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIEhvdyBwcmVjaXNlbHkgc2hvdWxkIEkgYmUgc3RhcnRlZD8gKi8KLQlpbnQgCQkJKCpzdGFydCkoc3RydWN0IGRzdF9ub2RlICopOwotCi0JLyogQ3J5cHRvIGNhcGFiaWxpdGllcyAqLwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bAljcnlwdG87Ci0JdTgJCQkqaGFzaF9rZXk7Ci0JdTgJCQkqY2lwaGVyX2tleTsKLQotCS8qIFBvb2wgb2YgcHJvY2Vzc2luZyB0aHJlYWQgKi8KLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wJKnBvb2w7Ci0KLQkvKiBUcmFuc2FjdGlvbiBJRHMgbGl2ZSBoZXJlICovCi0JYXRvbWljX2xvbmdfdAkJZ2VuOwotCi0JLyoKLQkgKiBIb3cgZnJlcXVlbnRseSBhbmQgaG93IG1hbnkgdGltZXMgdHJhbnNhY3Rpb24KLQkgKiB0cmVlIHNob3VsZCBiZSBzY2FubmVkIHRvIGRyb3Agc3RhbGUgb2JqZWN0cy4KLQkgKi8KLQlsb25nCQkJdHJhbnNfc2Nhbl90aW1lb3V0OwotCWludAkJCXRyYW5zX21heF9yZXRyaWVzOwotCi0JLyogU21hbGwgZ25vbWVzIGxpdmUgaGVyZSAqLwotCXN0cnVjdCByYl9yb290CQl0cmFuc19yb290OwotCXN0cnVjdCBtdXRleAkJdHJhbnNfbG9jazsKLQotCS8qCi0JICogVHJhbnNhY3Rpb24gY2FjaGUvbWVtb3J5IHBvb2wuCi0JICogSXQgaXMgYmlnIGVub3VnaCB0byBjb250YWluIG5vdCBvbmx5IHRyYW5zYWN0aW9uCi0JICogaXRzZWxmLCBidXQgYWRkaXRpb25hbCBjcnlwdG8gZGF0YSAoZGlnZXN0L2htYWMpLgotCSAqLwotCXN0cnVjdCBrbWVtX2NhY2hlCSp0cmFuc19jYWNoZTsKLQltZW1wb29sX3QJCSp0cmFuc19wb29sOwotCi0JLyogVGhpcyBlbnRpdHkgc2NhbnMgdHJhbnNhY3Rpb24gdHJlZSAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgCXRyYW5zX3dvcms7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotfTsKLQotLyogS2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGUgKi8KLXN0cnVjdCBkc3Rfc2VjdXJlCi17Ci0Jc3RydWN0IGxpc3RfaGVhZAlzZWNfZW50cnk7Ci0Jc3RydWN0IGRzdF9zZWN1cmVfdXNlcglzZWM7Ci19OwotCi1pbnQgZHN0X3Byb2Nlc3NfYmlvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKLQotaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcik7Ci1pbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9nZXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JQlVHX09OKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA9PSAwKTsKLQlhdG9taWNfaW5jKCZzdC0+cmVmY250KTsKLQlyZXR1cm4gc3Q7Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pOwotaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLXZvaWQgZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotdm9pZCBkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi1pbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotdm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JbXV0ZXhfbG9jaygmc3QtPnN0YXRlX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3VubG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQltdXRleF91bmxvY2soJnN0LT5zdGF0ZV9sb2NrKTsKLX0KLQotdm9pZCBkc3RfcG9sbF9leGl0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLWludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHN0X3N0YXRlX3BvbGwoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JdW5zaWduZWQgaW50IHJldmVudHMgPSBQT0xMSFVQIHwgUE9MTEVSUjsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoc3QtPnNvY2tldCkKLQkJcmV2ZW50cyA9IHN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCBOVUxMKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiByZXZlbnRzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkc3RfdGhyZWFkX3NldHVwKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9ub2RlICpkc3Rfbm9kZV9nZXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWF0b21pY19pbmMoJm4tPnJlZmNudCk7Ci0JcmV0dXJuIG47Ci19Ci0KLWludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1pbnQgZHN0X3JlY3ZfY2RhdGEoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmNkYXRhKTsKLWludCBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG1vcmUpOwotCi1pbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pOwotCi1pbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotaW50IGRzdF9leHBvcnRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKLWludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7Ci1pbnQgZHN0X3N0YXJ0X2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1pbnQgX19pbml0IGRzdF9leHBvcnRfaW5pdCh2b2lkKTsKLXZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpOwotCi0vKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgZXhwb3J0IGJsb2NrIElPIHJlcXVlc3RzICovCi1zdHJ1Y3QgZHN0X2V4cG9ydF9wcml2Ci17Ci0Jc3RydWN0IGxpc3RfaGVhZAkJcmVxdWVzdF9lbnRyeTsKLQlzdHJ1Y3QgZHN0X3N0YXRlCQkqc3RhdGU7Ci0Jc3RydWN0IGJpbwkJCSpiaW87Ci0Jc3RydWN0IGRzdF9jbWQJCQljbWQ7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3RyYW5zX2dldChzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWF0b21pY19pbmMoJnQtPnJlZmNudCk7Ci19Ci0KLXN0cnVjdCBkc3RfdHJhbnMgKmRzdF90cmFuc19zZWFyY2goc3RydWN0IGRzdF9ub2RlICpub2RlLCBkc3RfZ2VuX3QgZ2VuKTsKLWludCBkc3RfdHJhbnNfcmVtb3ZlKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotdm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotCi0vKgotICogQ29udmVydCBiaW8gaW50byBuZXR3b3JrIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfYmlvX3RvX2NtZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY21kICpjbWQsCi0JCXUzMiBjb21tYW5kLCB1NjQgaWQpCi17Ci0JY21kLT5jbWQgPSBjb21tYW5kOwotCWNtZC0+ZmxhZ3MgPSAoYmlvLT5iaV9mbGFncyA8PCBCSU9fUE9PTF9CSVRTKSA+PiBCSU9fUE9PTF9CSVRTOwotCWNtZC0+cncgPSBiaW8tPmJpX3J3OwotCWNtZC0+c2l6ZSA9IGJpby0+Ymlfc2l6ZTsKLQljbWQtPmNzaXplID0gMDsKLQljbWQtPmlkID0gaWQ7Ci0JY21kLT5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKLX07Ci0KLWludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLWludCBkc3RfdHJhbnNfY3J5cHRvKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotCi1pbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCk7Ci12b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRzdF9uZWVkX2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKLQkvKgotCSAqIExvZ2ljYWwgT1IgaXMgYXBwcm9wcmlhdGUgaGVyZSwgYnV0IGJvb2xlYW4gb25lIHByb2R1Y2VzCi0JICogbW9yZSBvcHRpbWFsIGNvZGUsIHNvIGl0IGlzIHVzZWQgaW5zdGVhZC4KLQkgKi8KLQlyZXR1cm4gKGMtPmhhc2hfYWxnb1swXSB8IGMtPmNpcGhlcl9hbGdvWzBdKTsKLX0KLQotaW50IGRzdF9ub2RlX3RyYW5zX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci12b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotLyoKLSAqIFBvb2wgb2YgdGhyZWFkcy4KLSAqIFJlYWR5IGxpc3QgY29udGFpbnMgdGhyZWFkcyBjdXJyZW50bHkgZnJlZSB0byBiZSB1c2VkLAotICogYWN0aXZlIG9uZSBjb250YWlucyB0aHJlYWRzIHdpdGggc29tZSB3b3JrIHNjaGVkdWxlZCBmb3IgdGhlbS4KLSAqIENhbGxlciBjYW4gd2FpdCBpbiBnaXZlbiBxdWV1ZSB3aGVuIHRocmVhZCBpcyByZWFkeS4KLSAqLwotc3RydWN0IHRocmVhZF9wb29sCi17Ci0JaW50CQkJdGhyZWFkX251bTsKLQlzdHJ1Y3QgbXV0ZXgJCXRocmVhZF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJcmVhZHlfbGlzdCwgYWN0aXZlX2xpc3Q7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotfTsKLQotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7Ci12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQoc3RydWN0IHRocmVhZF9wb29sICpwLCB1bnNpZ25lZCBpbnQgaWQpOwotaW50IHRocmVhZF9wb29sX2FkZF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQljaGFyICpuYW1lLAotCQl1bnNpZ25lZCBpbnQgaWQsCi0JCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAotCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhKTsKLQotdm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7Ci1zdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAotCQl2b2lkICooKiBpbml0KSh2b2lkICpkYXRhKSwKLQkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSk7Ci0KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKiBzZXR1cCkodm9pZCAqc3RvcmVkX3ByaXZhdGUsIHZvaWQgKnNldHVwX2RhdGEpLAotCQlpbnQgKCogYWN0aW9uKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCi0JCXZvaWQgKnNldHVwX2RhdGEsIGxvbmcgdGltZW91dCk7Ci1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKiBzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCWludCAoKiBhY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0RTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS9saW51eC9lbGYuaAppbmRleCA5MGE0ZWQwLi4wY2M0ZDU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZi5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxmLmgKQEAgLTM2MSw3ICszNjEsNyBAQAogI2RlZmluZSBOVF9QUENfVlNYCTB4MTAyCQkvKiBQb3dlclBDIFZTWCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTlRfMzg2X1RMUwkweDIwMAkJLyogaTM4NiBUTFMgc2xvdHMgKHN0cnVjdCB1c2VyX2Rlc2MpICovCiAjZGVmaW5lIE5UXzM4Nl9JT1BFUk0JMHgyMDEJCS8qIHg4NiBpbyBwZXJtaXNzaW9uIGJpdG1hcCAoMT1kZW55KSAqLwotI2RlZmluZSBOVF9QUlhTVEFUVVMJMHgzMDAJCS8qIHMzOTAgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzICovCisjZGVmaW5lIE5UX1MzOTBfSElHSF9HUFJTCTB4MzAwCS8qIHMzOTAgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzICovCiAKIAogLyogTm90ZSBoZWFkZXIgaW4gYSBQVF9OT1RFIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKaW5kZXggZjA3ZjM0ZC4uMjU4MDg4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKQEAgLTcyLDYgKzcyLDggQEAKIAlzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAJc3RydWN0IGpvdXJuYWxfcyAqIHNfam91cm5hbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOworCXN0cnVjdCBtdXRleCBzX29ycGhhbl9sb2NrOworCXN0cnVjdCBtdXRleCBzX3Jlc2l6ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqam91cm5hbF9iZGV2OwogI2lmZGVmIENPTkZJR19KQkRfREVCVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaCBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAppbmRleCBjZjgyZDUxLi5kN2I1ZGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2RlZmluZSBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKHNiKQkoRVhUM19TSU5HTEVEQVRBX1RSQU5TX0JMT0NLUyArIFwKIAkJCQkJIEVYVDNfWEFUVFJfVFJBTlNfQkxPQ0tTIC0gMiArIFwKLQkJCQkJIDIqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorCQkJCQkgRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSkKIAogLyogRGVsZXRlIG9wZXJhdGlvbnMgcG90ZW50aWFsbHkgaGl0IG9uZSBkaXJlY3RvcnkncyBuYW1lc3BhY2UgcGx1cyBhbgogICogZW50aXJlIGlub2RlLCBwbHVzIGFyYml0cmFyeSBhbW91bnRzIG9mIGJpdG1hcC9pbmRpcmVjdGlvbiBkYXRhLiAgQmUKICAqIGdlbmVyb3VzLiAgV2UgY2FuIGdyb3cgdGhlIGRlbGV0ZSB0cmFuc2FjdGlvbiBsYXRlciBpZiBuZWNlc3NhcnkuICovCiAKLSNkZWZpbmUgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKHNiKQkoMiAqIEVYVDNfREFUQV9UUkFOU19CTE9DS1Moc2IpICsgNjQpCisjZGVmaW5lIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhzYikgICAoRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSArIDY0KQogCiAvKiBEZWZpbmUgYW4gYXJiaXRyYXJ5IGxpbWl0IGZvciB0aGUgYW1vdW50IG9mIGRhdGEgd2Ugd2lsbCBhbnRpY2lwYXRlCiAgKiB3cml0aW5nIHRvIGFueSBnaXZlbiB0cmFuc2FjdGlvbi4gIEZvciB1bmJvdW5kZWQgdHJhbnNhY3Rpb25zIHN1Y2ggYXMKQEAgLTg2LDYgKzg2LDkgQEAKICNkZWZpbmUgRVhUM19RVU9UQV9JTklUX0JMT0NLUyhzYikgMAogI2RlZmluZSBFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpIDAKICNlbmRpZgorI2RlZmluZSBFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1Moc2IpIChNQVhRVU9UQVMqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorI2RlZmluZSBFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKHNiKSkKKyNkZWZpbmUgRVhUM19NQVhRVU9UQVNfREVMX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpKQogCiBpbnQKIGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggY2NhMTkxOS4uOTE0N2NhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTYyNCw4ICsxNjI0LDYgQEAKICAqCQkJb24gdGhlIGJpdCBhZGRyZXNzIG9uY2UgaXQgaXMgZG9uZS4KICAqCiAgKiBROiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSV9XSUxMX0ZSRUUgYW5kIElfRlJFRUlORz8KLSAqIFE6IGlncmFiKCkgb25seSBjaGVja3Mgb24gKElfRlJFRUlOR3xJX1dJTExfRlJFRSkuICBTaG91bGQgaXQgYWxzbyBjaGVjayBvbgotICogICAgSV9DTEVBUj8gIElmIG5vdCwgd2h5PwogICovCiAjZGVmaW5lIElfRElSVFlfU1lOQwkJMQogI2RlZmluZSBJX0RJUlRZX0RBVEFTWU5DCTIKQEAgLTIyOTksNiArMjI5Nyw3IEBACiBleHRlcm4gaW50IGdlbmVyaWNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgZ2VuZXJpY19maWxsYXR0cihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGtzdGF0ICopOwogZXh0ZXJuIGludCB2ZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7Cit2b2lkIF9faW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7CiB2b2lkIGlub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpOwogdm9pZCBpbm9kZV9zdWJfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKIGxvZmZfdCBpbm9kZV9nZXRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSk7CkBAIC0yNDY0LDUgKzI0NjMsOCBAQAogCiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQorI2RlZmluZSBPUEVOX0ZNT0RFKGZsYWcpICgoX19mb3JjZSBmbW9kZV90KSgoZmxhZyArIDEpICYgT19BQ0NNT0RFKSkKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmlmby5oIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCmluZGV4IGFkNmJkZjUuLjNkNDRlOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2ZpZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKQEAgLTEsNiArMSw3IEBACiAvKgotICogQSBzaW1wbGUga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCisgKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbmkgU2VpYm9sZCA8c3RlZmFuaUBzZWlib2xkLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOCw2ICsxOSwyNSBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCisKKy8qCisgKiBIb3d0byBwb3J0aW5nIGRyaXZlcnMgdG8gdGhlIG5ldyBnZW5lcmljIGZpZm8gQVBJOgorICoKKyAqIC0gTW9kaWZ5IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgInN0cnVjdCBrZmlmbyAqIiBvYmplY3QgaW50byBhCisgKiAgIGluLXBsYWNlICJzdHJ1Y3Qga2ZpZm8iIG9iamVjdAorICogLSBJbml0IHRoZSBpbi1wbGFjZSBvYmplY3Qgd2l0aCBrZmlmb19hbGxvYygpIG9yIGtmaWZvX2luaXQoKQorICogICBOb3RlOiBUaGUgYWRkcmVzcyBvZiB0aGUgaW4tcGxhY2UgInN0cnVjdCBrZmlmbyIgb2JqZWN0IG11c3QgYmUKKyAqICAgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9ucworICogLSBSZXBsYWNlIHRoZSB1c2Ugb2YgX19rZmlmb19wdXQgaW50byBrZmlmb19pbiBhbmQgX19rZmlmb19nZXQKKyAqICAgaW50byBrZmlmb19vdXQKKyAqIC0gUmVwbGFjZSB0aGUgdXNlIG9mIGtmaWZvX3B1dCBpbnRvIGtmaWZvX2luX2xvY2tlZCBhbmQga2ZpZm9fZ2V0CisgKiAgIGludG8ga2ZpZm9fb3V0X2xvY2tlZAorICogICBOb3RlOiB0aGUgc3BpbmxvY2sgcG9pbnRlciBmb3JtZXJseSBwYXNzZWQgdG8ga2ZpZm9faW5pdC9rZmlmb19hbGxvYworICogICBtdXN0IGJlIHBhc3NlZCBub3cgdG8gdGhlIGtmaWZvX2luX2xvY2tlZCBhbmQga2ZpZm9fb3V0X2xvY2tlZAorICogICBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuCisgKiAtIEFsbCBmb3JtZXJseSBuYW1lIF9fa2ZpZm9fKiBmdW5jdGlvbnMgaGFzIGJlZW4gcmVuYW1lZCBpbnRvIGtmaWZvXyoKKyAqLworCiAjaWZuZGVmIF9MSU5VWF9LRklGT19ICiAjZGVmaW5lIF9MSU5VWF9LRklGT19ICiAKQEAgLTI5LDEyNCArNDksNTYyIEBACiAJdW5zaWduZWQgaW50IHNpemU7CS8qIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyICovCiAJdW5zaWduZWQgaW50IGluOwkvKiBkYXRhIGlzIGFkZGVkIGF0IG9mZnNldCAoaW4gJSBzaXplKSAqLwogCXVuc2lnbmVkIGludCBvdXQ7CS8qIGRhdGEgaXMgZXh0cmFjdGVkIGZyb20gb2ZmLiAob3V0ICUgc2l6ZSkgKi8KLQlzcGlubG9ja190ICpsb2NrOwkvKiBwcm90ZWN0cyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgKi8KIH07CiAKLWV4dGVybiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2luaXQodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQlnZnBfdCBnZnBfbWFzaywgc3BpbmxvY2tfdCAqbG9jayk7Ci1leHRlcm4gc3RydWN0IGtmaWZvICprZmlmb19hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJIHNwaW5sb2NrX3QgKmxvY2spOwotZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOwotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbik7CisvKgorICogTWFjcm9zIGZvciBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGtmaWZvIGRhdGF0eXBlCisgKi8KKworLyogaGVscGVyIG1hY3JvICovCisjZGVmaW5lIF9fa2ZpZm9faW5pdGlhbGl6ZXIocywgYikgXAorCShzdHJ1Y3Qga2ZpZm8pIHsgXAorCQkuc2l6ZQk9IHMsIFwKKwkJLmluCT0gMCwgXAorCQkub3V0CT0gMCwgXAorCQkuYnVmZmVyID0gYiBcCisJfQogCiAvKioKLSAqIF9fa2ZpZm9fcmVzZXQgLSByZW1vdmVzIHRoZSBlbnRpcmUgRklGTyBjb250ZW50cywgbm8gbG9ja2luZyB2ZXJzaW9uCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZW1wdGllZC4KKyAqIERFQ0xBUkVfS0ZJRk8gLSBtYWNybyB0byBkZWNsYXJlIGEga2ZpZm8gYW5kIHRoZSBhc3NvY2lhdGVkIGJ1ZmZlcgorICogQG5hbWU6IG5hbWUgb2YgdGhlIGRlY2xhcmVkIGtmaWZvIGRhdGF0eXBlCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgZmlmbyBidWZmZXIKKyAqCisgKiBOb3RlMTogdGhlIG1hY3JvIGNhbiBiZSB1c2VkIGluc2lkZSBzdHJ1Y3Qgb3IgdW5pb24gZGVjbGFyYXRpb24KKyAqIE5vdGUyOiB0aGUgbWFjcm8gY3JlYXRlcyB0d28gb2JqZWN0czoKKyAqICBBIGtmaWZvIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBhIGJ1ZmZlciBmb3IgdGhlIGtmaWZvCisgKiAgb2JqZWN0IG5hbWVkIG5hbWUjI2tmaWZvX2J1ZmZlcgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19yZXNldChzdHJ1Y3Qga2ZpZm8gKmZpZm8pCi17Ci0JZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworI2RlZmluZSBERUNMQVJFX0tGSUZPKG5hbWUsIHNpemUpIFwKK3VuaW9uIHsgXAorCXN0cnVjdCBrZmlmbyBuYW1lOyBcCisJdW5zaWduZWQgY2hhciBuYW1lIyNrZmlmb19idWZmZXJbc2l6ZSArIHNpemVvZihzdHJ1Y3Qga2ZpZm8pXTsgXAogfQogCiAvKioKKyAqIElOSVRfS0ZJRk8gLSBJbml0aWFsaXplIGEga2ZpZm8gZGVjbGFyZWQgYnkgREVDTEFSRURfS0ZJRk8KKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQorICovCisjZGVmaW5lIElOSVRfS0ZJRk8obmFtZSkgXAorCW5hbWUgPSBfX2tmaWZvX2luaXRpYWxpemVyKHNpemVvZihuYW1lIyNrZmlmb19idWZmZXIpIC0gXAorCQkJCXNpemVvZihzdHJ1Y3Qga2ZpZm8pLCBuYW1lIyNrZmlmb19idWZmZXIpCisKKy8qKgorICogREVGSU5FX0tGSUZPIC0gbWFjcm8gdG8gZGVmaW5lIGFuZCBpbml0aWFsaXplIGEga2ZpZm8KKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQorICogQHNpemU6IHNpemUgb2YgdGhlIGZpZm8gYnVmZmVyCisgKgorICogTm90ZTE6IHRoZSBtYWNybyBjYW4gYmUgdXNlZCBmb3IgZ2xvYmFsIGFuZCBsb2NhbCBrZmlmbyBkYXRhIHR5cGUgdmFyaWFibGVzCisgKiBOb3RlMjogdGhlIG1hY3JvIGNyZWF0ZXMgdHdvIG9iamVjdHM6CisgKiAgQSBrZmlmbyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYSBidWZmZXIgZm9yIHRoZSBrZmlmbworICogIG9iamVjdCBuYW1lZCBuYW1lIyNrZmlmb19idWZmZXIKKyAqLworI2RlZmluZSBERUZJTkVfS0ZJRk8obmFtZSwgc2l6ZSkgXAorCXVuc2lnbmVkIGNoYXIgbmFtZSMja2ZpZm9fYnVmZmVyW3NpemVdOyBcCisJc3RydWN0IGtmaWZvIG5hbWUgPSBfX2tmaWZvX2luaXRpYWxpemVyKHNpemUsIG5hbWUjI2tmaWZvX2J1ZmZlcikKKworI3VuZGVmIF9fa2ZpZm9faW5pdGlhbGl6ZXIKKworZXh0ZXJuIHZvaWQga2ZpZm9faW5pdChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCXVuc2lnbmVkIGludCBzaXplKTsKK2V4dGVybiBfX211c3RfY2hlY2sgaW50IGtmaWZvX2FsbG9jKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHNpemUsCisJCQlnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbyk7CitleHRlcm4gdW5zaWduZWQgaW50IGtmaWZvX2luKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2V4dGVybiBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgY2hhciAqdG8sIHVuc2lnbmVkIGludCBsZW4pOworCisvKioKICAqIGtmaWZvX3Jlc2V0IC0gcmVtb3ZlcyB0aGUgZW50aXJlIEZJRk8gY29udGVudHMKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXQoc3RydWN0IGtmaWZvICpmaWZvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7Ci0KLQlfX2tmaWZvX3Jlc2V0KGZpZm8pOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmaWZvLT5sb2NrLCBmbGFncyk7CisJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOwogfQogCiAvKioKLSAqIGtmaWZvX3B1dCAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8KKyAqIGtmaWZvX3Jlc2V0X291dCAtIHNraXAgRklGTyBjb250ZW50cworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIGVtcHRpZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBrZmlmb19yZXNldF9vdXQoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXNtcF9tYigpOworCWZpZm8tPm91dCA9IGZpZm8tPmluOworfQorCisvKioKKyAqIGtmaWZvX3NpemUgLSByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWZvIGluIGJ5dGVzCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3NpemUoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXJldHVybiBmaWZvLT5zaXplOworfQorCisvKioKKyAqIGtmaWZvX2xlbiAtIHJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIGJ5dGVzIGluIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fbGVuKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQJb3V0OworCisJb3V0ID0gZmlmby0+b3V0OworCXNtcF9ybWIoKTsKKwlyZXR1cm4gZmlmby0+aW4gLSBvdXQ7Cit9CisKKy8qKgorICoga2ZpZm9faXNfZW1wdHkgLSByZXR1cm5zIHRydWUgaWYgdGhlIGZpZm8gaXMgZW1wdHkKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayBpbnQga2ZpZm9faXNfZW1wdHkoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXJldHVybiBmaWZvLT5pbiA9PSBmaWZvLT5vdXQ7Cit9CisKKy8qKgorICoga2ZpZm9faXNfZnVsbCAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlmbyBpcyBmdWxsCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IGtmaWZvX2lzX2Z1bGwoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXJldHVybiBrZmlmb19sZW4oZmlmbykgPT0ga2ZpZm9fc2l6ZShmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19hdmFpbCAtIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fYXZhaWwoc3RydWN0IGtmaWZvICpmaWZvKQoreworCXJldHVybiBrZmlmb19zaXplKGZpZm8pIC0ga2ZpZm9fbGVuKGZpZm8pOworfQorCisvKioKKyAqIGtmaWZvX2luX2xvY2tlZCAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8gdXNpbmcgYSBzcGlubG9jayBmb3IgbG9ja2luZworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBsb2NrOiBwb2ludGVyIHRvIHRoZSBzcGlubG9jayB0byB1c2UgZm9yIGxvY2tpbmcuCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBidWZmZXIgaW50bworICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGJ1ZmZlciBpbnRvCiAgKiB0aGUgRklGTyBkZXBlbmRpbmcgb24gdGhlIGZyZWUgc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKICAqIGJ5dGVzIGNvcGllZC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19pbl9sb2NrZWQoc3RydWN0IGtmaWZvICpmaWZvLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gX19rZmlmb19wdXQoZmlmbywgYnVmZmVyLCBsZW4pOworCXJldCA9IGtmaWZvX2luKGZpZm8sIGZyb20sIG4pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmaWZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIGtmaWZvX2dldCAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIEZJRk8KKyAqIGtmaWZvX291dF9sb2NrZWQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGJ1ZmZlcjogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCi0gKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQGxvY2s6IHBvaW50ZXIgdG8gdGhlIHNwaW5sb2NrIHRvIHVzZSBmb3IgbG9ja2luZy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQotICogQGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqIEB0byBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX2dldChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fb3V0X2xvY2tlZChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdW5zaWduZWQgY2hhciAqdG8sIHVuc2lnbmVkIGludCBuLCBzcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncyk7CiAKLQlyZXQgPSBfX2tmaWZvX2dldChmaWZvLCBidWZmZXIsIGxlbik7CisJcmV0ID0ga2ZpZm9fb3V0KGZpZm8sIHRvLCBuKTsKIAogCS8qCiAJICogb3B0aW1pemF0aW9uOiBpZiB0aGUgRklGTyBpcyBlbXB0eSwgc2V0IHRoZSBpbmRpY2VzIHRvIDAKIAkgKiBzbyB3ZSBkb24ndCB3cmFwIHRoZSBuZXh0IHRpbWUKIAkgKi8KLQlpZiAoZmlmby0+aW4gPT0gZmlmby0+b3V0KQotCQlmaWZvLT5pbiA9IGZpZm8tPm91dCA9IDA7CisJaWYgKGtmaWZvX2lzX2VtcHR5KGZpZm8pKQorCQlrZmlmb19yZXNldChmaWZvKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiBfX2tmaWZvX2xlbiAtIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIEZJRk8sIG5vIGxvY2tpbmcgdmVyc2lvbgotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCitleHRlcm4gdm9pZCBrZmlmb19za2lwKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IGxlbik7CisKK2V4dGVybiBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2Zyb21fdXNlcihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuKTsKKworZXh0ZXJuIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fdG9fdXNlcihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qCisgKiBfX2tmaWZvX2FkZF9vdXQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGluZyB0aGUgb3V0IG9mZnNldAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX2xlbihzdHJ1Y3Qga2ZpZm8gKmZpZm8pCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19hZGRfb3V0KHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQl1bnNpZ25lZCBpbnQgb2ZmKQogewotCXJldHVybiBmaWZvLT5pbiAtIGZpZm8tPm91dDsKKwlzbXBfbWIoKTsKKwlmaWZvLT5vdXQgKz0gb2ZmOwogfQogCi0vKioKLSAqIGtmaWZvX2xlbiAtIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIEZJRk8KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorLyoKKyAqIF9fa2ZpZm9fYWRkX2luIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGluIG9mZnNldAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX2luKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQl1bnNpZ25lZCBpbnQgb2ZmKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc21wX3dtYigpOworCWZpZm8tPmluICs9IG9mZjsKK30KKworLyoKKyAqIF9fa2ZpZm9fb2ZmIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgdGhlIGluZGV4IG9mIGEKKyAqIGdpdmVuIG9mZmVzZXQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19vZmYoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXJldHVybiBvZmYgJiAoZmlmby0+c2l6ZSAtIDEpOworfQorCisvKgorICogX19rZmlmb19wZWVrX24gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmF0ZSB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIGZpZm8KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX24oc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGludCByZWNzaXplKQoreworI2RlZmluZSBfX0tGSUZPX0dFVChmaWZvLCBvZmYsIHNoaWZ0KSBcCisJKChmaWZvKS0+YnVmZmVyW19fa2ZpZm9fb2ZmKChmaWZvKSwgKGZpZm8pLT5vdXQrKG9mZikpXSA8PCAoc2hpZnQpKQorCisJdW5zaWduZWQgaW50IGw7CisKKwlsID0gX19LRklGT19HRVQoZmlmbywgMCwgMCk7CisKKwlpZiAoLS1yZWNzaXplKQorCQlsIHw9IF9fS0ZJRk9fR0VUKGZpZm8sIDEsIDgpOworCisJcmV0dXJuIGw7CisjdW5kZWYJX19LRklGT19HRVQKK30KKworLyoKKyAqIF9fa2ZpZm9fcG9rZV9uIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3Igc3RvcmluZyB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbmV4dCByZWNvcmQgaW50byB0aGUgZmlmbworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19wb2tlX24oc3RydWN0IGtmaWZvICpmaWZvLAorCQkJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCBuKQoreworI2RlZmluZSBfX0tGSUZPX1BVVChmaWZvLCBvZmYsIHZhbCwgc2hpZnQpIFwKKwkJKCBcCisJCShmaWZvKS0+YnVmZmVyW19fa2ZpZm9fb2ZmKChmaWZvKSwgKGZpZm8pLT5pbisob2ZmKSldID0gXAorCQkodW5zaWduZWQgY2hhcikoKHZhbCkgPj4gKHNoaWZ0KSkgXAorCQkpCisKKwlfX0tGSUZPX1BVVChmaWZvLCAwLCBuLCAwKTsKKworCWlmICgtLXJlY3NpemUpCisJCV9fS0ZJRk9fUFVUKGZpZm8sIDEsIG4sIDgpOworI3VuZGVmCV9fS0ZJRk9fUFVUCit9CisKKy8qCisgKiBfX2tmaWZvX2luXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHB1dCBkYXRlIGludG8gdGhlIGZpZm8KKyAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9faW5fcmVjKCkgaW5zdGVhZAorICovCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBfX2tmaWZvX2luX24oZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7CiAKLQlyZXQgPSBfX2tmaWZvX2xlbihmaWZvKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOwotCisJaWYgKGxpa2VseShyZXQgPT0gMCkpIHsKKwkJaWYgKHJlY3NpemUpCisJCQlfX2tmaWZvX3Bva2VfbihmaWZvLCByZWNzaXplLCBuKTsKKwkJX19rZmlmb19hZGRfaW4oZmlmbywgbiArIHJlY3NpemUpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGtmaWZvX2luX3JlYyAtIHB1dHMgc29tZSByZWNvcmQgZGF0YSBpbnRvIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEBmcm9tOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgQG4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUgRklGTyBhbmQgcmV0dXJucworICogdGhlIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QgYmUgY29waWVkLgorICogQSByZXR1cm5lZCB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIEBuIHZhbHVlIG1lYW5zIHRoYXQgdGhlIHJlY29yZCBkb2Vzbid0CisgKiBmaXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19pbl9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlyZXR1cm4gX19rZmlmb19pbl9nZW5lcmljKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOworCXJldHVybiBfX2tmaWZvX2luX3JlYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fb3V0Xy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIGdldCBkYXRlIGZyb20gdGhlIGZpZm8KKyAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fb3V0X3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IHJlY2xlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpOworCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSwgdW5zaWduZWQgaW50ICp0b3RhbCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXVuc2lnbmVkIGludCBsOworCisJaWYgKCFyZWNzaXplKSB7CisJCWwgPSBuOworCQlpZiAodG90YWwpCisJCQkqdG90YWwgPSBsOworCX0gZWxzZSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwkJaWYgKG4gPCBsKQorCQkJcmV0dXJuIGw7CisJfQorCisJcmV0dXJuIF9fa2ZpZm9fb3V0X24oZmlmbywgdG8sIGwsIHJlY3NpemUpOworfQorCisvKioKKyAqIGtmaWZvX291dF9yZWMgLSBnZXRzIHNvbWUgcmVjb3JkIGRhdGEgZnJvbSB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgorICogQG46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKKyAqIEB0b3RhbDogcG9pbnRlciB3aGVyZSB0aGUgdG90YWwgbnVtYmVyIG9mIHRvIGNvcGllZCBieXRlcyBzaG91bGQgc3RvcmVkCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbiBieXRlcyBmcm9tIHRoZSBGSUZPIHRvIEB0byBhbmQgcmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QgYmUgY29waWVkLgorICogQSByZXR1cm5lZCB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIEBuIHZhbHVlIG1lYW5zIHRoYXQgdGhlIHJlY29yZCBkb2Vzbid0CisgKiBmaXQgaW50byB0aGUgQHRvIGJ1ZmZlci4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fb3V0X3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQorCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fb3V0X2dlbmVyaWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKKwlyZXR1cm4gX19rZmlmb19vdXRfcmVjKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7Cit9CisKKy8qCisgKiBfX2tmaWZvX2Zyb21fdXNlcl8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciB0cmFuc2ZlciBmcm9tIHVzZXIgc3BhY2UgaW50bworICogdGhlIGZpZm8uIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fZnJvbV91c2VyX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCXVuc2lnbmVkIGludCByZXQ7CisKKwlyZXQgPSBfX2tmaWZvX2Zyb21fdXNlcl9uKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOworCisJaWYgKGxpa2VseShyZXQgPT0gMCkpIHsKKwkJaWYgKHJlY3NpemUpCisJCQlfX2tmaWZvX3Bva2VfbihmaWZvLCByZWNzaXplLCBuKTsKKwkJX19rZmlmb19hZGRfaW4oZmlmbywgbiArIHJlY3NpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGtmaWZvX2Zyb21fdXNlcl9yZWMgLSBwdXRzIHNvbWUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgQG4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKKyAqIEZJRk8gYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QgYmUgY29waWVkLgorICoKKyAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBlcXVhbCBvciBsZXNzIHRoZSBAbiB2YWx1ZSwgdGhlIGNvcHlfZnJvbV91c2VyKCkKKyAqIGZ1bmN0aW9ucyBoYXMgZmFpbGVkLiBPdGhlcndpc2UgdGhlIHJlY29yZCBkb2Vzbid0IGZpdCBpbnRvIHRoZSBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2Zyb21fdXNlcl9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fZnJvbV91c2VyX2dlbmVyaWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7CisJcmV0dXJuIF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fdG9fdXNlcl8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciB0cmFuc2ZlciBmaWZvIGRhdGEgaW50byB1c2VyIHNwYWNlCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX3RvX3VzZXJfcmVjKCkgaW5zdGVhZAorICovCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjbGVuLAorCXVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCAqdG90YWwpCit7CisJdW5zaWduZWQgaW50IGw7CisKKwlpZiAoIXJlY3NpemUpIHsKKwkJbCA9IG47CisJCWlmICh0b3RhbCkKKwkJCSp0b3RhbCA9IGw7CisJfSBlbHNlIHsKKwkJbCA9IF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOworCQlpZiAodG90YWwpCisJCQkqdG90YWwgPSBsOworCQlpZiAobiA8IGwpCisJCQlyZXR1cm4gbDsKKwl9CisKKwlyZXR1cm4gX19rZmlmb190b191c2VyX24oZmlmbywgdG8sIG4sIGwsIHJlY3NpemUpOworfQorCisvKioKKyAqIGtmaWZvX3RvX3VzZXJfcmVjIC0gZ2V0cyBkYXRhIGZyb20gdGhlIEZJRk8gYW5kIHdyaXRlIGl0IHRvIHVzZXIgc3BhY2UKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBAdG90YWw6IHBvaW50ZXIgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB0byBjb3BpZWQgYnl0ZXMgc2hvdWxkIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyB0byB0aGUgQHRvLgorICogSW4gY2FzZSBvZiBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QKKyAqIGJlIGNvcGllZC4KKyAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBlcXVhbCBvciBsZXNzIHRoZSBAbiB2YWx1ZSwgdGhlIGNvcHlfdG9fdXNlcigpCisgKiBmdW5jdGlvbnMgaGFzIGZhaWxlZC4gT3RoZXJ3aXNlIHRoZSByZWNvcmQgZG9lc24ndCBmaXQgaW50byB0aGUgQHRvIGJ1ZmZlci4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fdG9fdXNlcl9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCQl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwkJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlyZXR1cm4gX19rZmlmb190b191c2VyX2dlbmVyaWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKKwlyZXR1cm4gX19rZmlmb190b191c2VyX3JlYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOworfQorCisvKgorICogX19rZmlmb19wZWVrXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHBlZWsgaW50byB0aGUgbmV4dCBmaWZvIHJlY29yZAorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19wZWVrX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3BlZWtfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IHJlY3NpemUpOworCisvKioKKyAqIGtmaWZvX3BlZWtfcmVjIC0gZ2V0cyB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBGSUZPIHJlY29yZCBkYXRhCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBGSUZPIHJlY29yZCBpbiBudW1iZXIgb2YgYnl0ZXMKKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3BlZWtfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlyZXR1cm4gX19rZmlmb19wZWVrX2dlbmVyaWMoZmlmbywgcmVjc2l6ZSk7CisJaWYgKCFyZWNzaXplKQorCQlyZXR1cm4ga2ZpZm9fbGVuKGZpZm8pOworCXJldHVybiBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fc2tpcF8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBza2lwIHRoZSBuZXh0IGZpZm8gcmVjb3JkCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX3NraXBfcmVjKCkgaW5zdGVhZAorICovCitleHRlcm4gdm9pZCBfX2tmaWZvX3NraXBfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fc2tpcF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGludCByZWNzaXplKQoreworCXVuc2lnbmVkIGludCBsOworCisJaWYgKHJlY3NpemUpIHsKKwkJbCA9IF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOworCisJCWlmIChsICsgcmVjc2l6ZSA8PSBrZmlmb19sZW4oZmlmbykpIHsKKwkJCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsICsgcmVjc2l6ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJa2ZpZm9fcmVzZXRfb3V0KGZpZm8pOworfQorCisvKioKKyAqIGtmaWZvX3NraXBfcmVjIC0gc2tpcCB0aGUgbmV4dCBmaWZvIG91dCByZWNvcmQKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKgorICogVGhpcyBmdW5jdGlvbiBza2lwcyB0aGUgbmV4dCBGSUZPIHJlY29yZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fc2tpcF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCV9fa2ZpZm9fc2tpcF9nZW5lcmljKGZpZm8sIHJlY3NpemUpOworCWVsc2UKKwkJX19rZmlmb19za2lwX3JlYyhmaWZvLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb19hdmFpbF9yZWMgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIGEgcmVjb3JkIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19hdmFpbF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGludCByZWNzaXplKQoreworCXVuc2lnbmVkIGludCBsID0ga2ZpZm9fc2l6ZShmaWZvKSAtIGtmaWZvX2xlbihmaWZvKTsKKworCXJldHVybiAobCA+IHJlY3NpemUpID8gbCAtIHJlY3NpemUgOiAwOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCmluZGV4IDM3ZmExOWIuLjFhZGZlNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtNTAsNiArNTAsMTkgQEAKIAlpbnQgc3RhdHVzX2NoYW5nZV9uaWQ7CiB9OwogCisvKgorICogRHVyaW5nIHBhZ2VibG9jayBpc29sYXRpb24sIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgd2l0aGluIHRoZQorICogcmFuZ2UgW3N0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpIHdoaWNoIGFyZSBvd25lZCBieSBjb2RlCisgKiBpbiB0aGUgbm90aWZpZXIgY2hhaW4uCisgKi8KKyNkZWZpbmUgTUVNX0lTT0xBVEVfQ09VTlQJKDE8PDApCisKK3N0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwkvKiBTdGFydCBvZiByYW5nZSB0byBjaGVjayAqLworCXVuc2lnbmVkIGludCBucl9wYWdlczsJCS8qICMgcGFnZXMgaW4gcmFuZ2UgdG8gY2hlY2sgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfZm91bmQ7CS8qICMgcGFnZXMgb3duZWQgZm91bmQgYnkgY2FsbGJhY2tzICovCit9OworCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiBzdHJ1Y3QgbWVtX3NlY3Rpb247CiAKQEAgLTc2LDE0ICs4OSwyOCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIDA7Cit9CiAjZWxzZQogZXh0ZXJuIGludCByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9uZXdfbWVtb3J5KGludCwgc3RydWN0IG1lbV9zZWN0aW9uICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21lbW9yeV9zZWN0aW9uKHN0cnVjdCBtZW1fc2VjdGlvbiAqKTsKIGV4dGVybiBpbnQgbWVtb3J5X2Rldl9pbml0KHZvaWQpOwogZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5X2Jsb2NrKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBtZW1fc2VjdGlvbiAqLCBpbnQpOwogZXh0ZXJuIGludCBtZW1vcnlfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKK2V4dGVybiBpbnQgbWVtb3J5X2lzb2xhdGVfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKIGV4dGVybiBzdHJ1Y3QgbWVtb3J5X2Jsb2NrICpmaW5kX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtX3NlY3Rpb24gKik7CiAjZGVmaW5lIENPTkZJR19NRU1fQkxPQ0tfU0laRQkoUEFHRVNfUEVSX1NFQ1RJT048PFBBR0VfU0hJRlQpCiBlbnVtIG1lbV9hZGRfY29udGV4dCB7IEJPT1QsIEhPVFBMVUcgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4NDliNGE2Li4yMjY1ZjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDM3LDYgKzEwMzcsOSBAQAogZXh0ZXJuIHZvaWQgcmVtb3ZlX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9hbGxfYWN0aXZlX3Jhbmdlcyh2b2lkKTsKK3ZvaWQgc29ydF9ub2RlX21hcCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWJzZW50X3BhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIGV4dGVybiB2b2lkIGdldF9wZm5fcmFuZ2VfZm9yX25pZCh1bnNpZ25lZCBpbnQgbmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IDAyODk0NjcuLjA1YjQ0MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKQEAgLTcyLDggKzcyLDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBmaWxlICpsb29rdXBfaW5zdGFudGlhdGVfZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQlpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpOwotZXh0ZXJuIHN0cnVjdCBmaWxlICpuYW1laWRhdGFfdG9fZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmYjI1Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiAgTk9URTogdGhpcyBmaWxlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZSwgaXQgaXMKLSAqICBwcm92aWRlZCBhcyBhIGNvdXJ0ZXN5IGNvcHkgb2YgdXNlci1zcGFjZSBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZQotICogIG9sZCAocHJlLXJlbmFtZSkgc3ltYm9scyBhbmQgY29uc3RhbnRzLgotICoKLSAqICBQZXJmb3JtYW5jZSBldmVudHM6Ci0gKgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKLSAqCi0gKiAgRGF0YSB0eXBlIGRlZmluaXRpb25zLCBkZWNsYXJhdGlvbnMsIHByb3RvdHlwZXMuCi0gKgotICogICAgU3RhcnRlZCBieTogVGhvbWFzIEdsZWl4bmVyIGFuZCBJbmdvIE1vbG5hcgotICoKLSAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKLSAqLwotI2lmbmRlZiBfTElOVVhfUEVSRl9DT1VOVEVSX0gKLSNkZWZpbmUgX0xJTlVYX1BFUkZfQ09VTlRFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0vKgotICogVXNlci1zcGFjZSBBQkkgYml0czoKLSAqLwotCi0vKgotICogYXR0ci50eXBlCi0gKi8KLWVudW0gcGVyZl90eXBlX2lkIHsKLQlQRVJGX1RZUEVfSEFSRFdBUkUJCQk9IDAsCi0JUEVSRl9UWVBFX1NPRlRXQVJFCQkJPSAxLAotCVBFUkZfVFlQRV9UUkFDRVBPSU5UCQkJPSAyLAotCVBFUkZfVFlQRV9IV19DQUNIRQkJCT0gMywKLQlQRVJGX1RZUEVfUkFXCQkJCT0gNCwKLQotCVBFUkZfVFlQRV9NQVgsCQkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBHZW5lcmFsaXplZCBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50IHR5cGVzLCB1c2VkIGJ5IHRoZQotICogYXR0ci5ldmVudF9pZCBwYXJhbWV0ZXIgb2YgdGhlIHN5c19wZXJmX2NvdW50ZXJfb3BlbigpCi0gKiBzeXNjYWxsOgotICovCi1lbnVtIHBlcmZfaHdfaWQgewotCS8qCi0JICogQ29tbW9uIGhhcmR3YXJlIGV2ZW50cywgZ2VuZXJhbGl6ZWQgYnkgdGhlIGtlcm5lbDoKLQkgKi8KLQlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwkJPSAyLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTCQk9IDMsCi0JUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCT0gNCwKLQlQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCT0gNSwKLQlQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMJCT0gNiwKLQotCVBFUkZfQ09VTlRfSFdfTUFYLAkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBHZW5lcmFsaXplZCBoYXJkd2FyZSBjYWNoZSBjb3VudGVyczoKLSAqCi0gKiAgICAgICB7IEwxLUQsIEwxLUksIExMQywgSVRMQiwgRFRMQiwgQlBVIH0geAotICogICAgICAgeyByZWFkLCB3cml0ZSwgcHJlZmV0Y2ggfSB4Ci0gKiAgICAgICB7IGFjY2Vzc2VzLCBtaXNzZXMgfQotICovCi1lbnVtIHBlcmZfaHdfY2FjaGVfaWQgewotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQkJPSAwLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk9IDIsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk9IDMsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9JVExCCQk9IDQsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9CUFUJCQk9IDUsCi0KLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCwJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLWVudW0gcGVyZl9od19jYWNoZV9vcF9pZCB7Ci0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk9IDAsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9XUklURQkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJCT0gMiwKLQotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYLAkJLyogbm9uLUFCSSAqLwotfTsKLQotZW51bSBwZXJmX2h3X2NhY2hlX29wX3Jlc3VsdF9pZCB7Ci0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCQk9IDEsCi0KLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgsCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogU3BlY2lhbCAic29mdHdhcmUiIGNvdW50ZXJzIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwsIGV2ZW4gaWYgdGhlIGhhcmR3YXJlCi0gKiBkb2VzIG5vdCBzdXBwb3J0IHBlcmZvcm1hbmNlIGNvdW50ZXJzLiBUaGVzZSBjb3VudGVycyBtZWFzdXJlIHZhcmlvdXMKLSAqIHBoeXNpY2FsIGFuZCBzdyBldmVudHMgb2YgdGhlIGtlcm5lbCAoYW5kIGFsbG93IHRoZSBwcm9maWxpbmcgb2YgdGhlbSBhcwotICogd2VsbCk6Ci0gKi8KLWVudW0gcGVyZl9zd19pZHMgewotCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQkJPSAwLAotCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwkJPSAxLAotCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCT0gMiwKLQlQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJCT0gMywKLQlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCQk9IDQsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4JCT0gNSwKLQlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSgkJPSA2LAotCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwkJPSA3LAotCVBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUwkJPSA4LAotCi0JUEVSRl9DT1VOVF9TV19NQVgsCQkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIEJpdHMgdGhhdCBjYW4gYmUgc2V0IGluIGF0dHIuc2FtcGxlX3R5cGUgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgotICogaW4gdGhlIG92ZXJmbG93IHBhY2tldHMuCi0gKi8KLWVudW0gcGVyZl9jb3VudGVyX3NhbXBsZV9mb3JtYXQgewotCVBFUkZfU0FNUExFX0lQCQkJCT0gMVUgPDwgMCwKLQlQRVJGX1NBTVBMRV9USUQJCQkJPSAxVSA8PCAxLAotCVBFUkZfU0FNUExFX1RJTUUJCQk9IDFVIDw8IDIsCi0JUEVSRl9TQU1QTEVfQUREUgkJCT0gMVUgPDwgMywKLQlQRVJGX1NBTVBMRV9SRUFECQkJPSAxVSA8PCA0LAotCVBFUkZfU0FNUExFX0NBTExDSEFJTgkJCT0gMVUgPDwgNSwKLQlQRVJGX1NBTVBMRV9JRAkJCQk9IDFVIDw8IDYsCi0JUEVSRl9TQU1QTEVfQ1BVCQkJCT0gMVUgPDwgNywKLQlQRVJGX1NBTVBMRV9QRVJJT0QJCQk9IDFVIDw8IDgsCi0JUEVSRl9TQU1QTEVfU1RSRUFNX0lECQkJPSAxVSA8PCA5LAotCVBFUkZfU0FNUExFX1JBVwkJCQk9IDFVIDw8IDEwLAotCi0JUEVSRl9TQU1QTEVfTUFYID0gMVUgPDwgMTEsCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSByZXR1cm5lZCBieSByZWFkKCkgb24gYSBwZXJmIGNvdW50ZXIgZmQsCi0gKiBhcyBzcGVjaWZpZWQgYnkgYXR0ci5yZWFkX2Zvcm1hdDoKLSAqCi0gKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgewotICoJeyB1NjQJCXZhbHVlOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCi0gKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKLSAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCi0gKgotICoJeyB1NjQJCW5yOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCi0gKgkgIHsgdTY0CQl2YWx1ZTsKLSAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKLSAqCSAgfQkJY250cltucl07Ci0gKgl9ICYmIFBFUkZfRk9STUFUX0dST1VQCi0gKiB9OwotICovCi1lbnVtIHBlcmZfY291bnRlcl9yZWFkX2Zvcm1hdCB7Ci0JUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECQk9IDFVIDw8IDAsCi0JUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCQk9IDFVIDw8IDEsCi0JUEVSRl9GT1JNQVRfSUQJCQkJPSAxVSA8PCAyLAotCVBFUkZfRk9STUFUX0dST1VQCQkJPSAxVSA8PCAzLAotCi0JUEVSRl9GT1JNQVRfTUFYID0gMVUgPDwgNCwgCQkvKiBub24tQUJJICovCi19OwotCi0jZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjAJNjQJLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KLQotLyoKLSAqIEhhcmR3YXJlIGV2ZW50IHRvIG1vbml0b3IgdmlhIGEgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyOgotICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgewotCi0JLyoKLQkgKiBNYWpvciB0eXBlOiBoYXJkd2FyZS9zb2Z0d2FyZS90cmFjZXBvaW50L2V0Yy4KLQkgKi8KLQlfX3UzMgkJCXR5cGU7Ci0KLQkvKgotCSAqIFNpemUgb2YgdGhlIGF0dHIgc3RydWN0dXJlLCBmb3IgZndkL2J3ZCBjb21wYXQuCi0JICovCi0JX191MzIJCQlzaXplOwotCi0JLyoKLQkgKiBUeXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0JICovCi0JX191NjQJCQljb25maWc7Ci0KLQl1bmlvbiB7Ci0JCV9fdTY0CQlzYW1wbGVfcGVyaW9kOwotCQlfX3U2NAkJc2FtcGxlX2ZyZXE7Ci0JfTsKLQotCV9fdTY0CQkJc2FtcGxlX3R5cGU7Ci0JX191NjQJCQlyZWFkX2Zvcm1hdDsKLQotCV9fdTY0CQkJZGlzYWJsZWQgICAgICAgOiAgMSwgLyogb2ZmIGJ5IGRlZmF1bHQgICAgICAgICovCi0JCQkJaW5oZXJpdAkgICAgICAgOiAgMSwgLyogY2hpbGRyZW4gaW5oZXJpdCBpdCAgICovCi0JCQkJcGlubmVkCSAgICAgICA6ICAxLCAvKiBtdXN0IGFsd2F5cyBiZSBvbiBQTVUgKi8KLQkJCQlleGNsdXNpdmUgICAgICA6ICAxLCAvKiBvbmx5IGdyb3VwIG9uIFBNVSAgICAgKi8KLQkJCQlleGNsdWRlX3VzZXIgICA6ICAxLCAvKiBkb24ndCBjb3VudCB1c2VyICAgICAgKi8KLQkJCQlleGNsdWRlX2tlcm5lbCA6ICAxLCAvKiBkaXR0byBrZXJuZWwgICAgICAgICAgKi8KLQkJCQlleGNsdWRlX2h2ICAgICA6ICAxLCAvKiBkaXR0byBoeXBlcnZpc29yICAgICAgKi8KLQkJCQlleGNsdWRlX2lkbGUgICA6ICAxLCAvKiBkb24ndCBjb3VudCB3aGVuIGlkbGUgKi8KLQkJCQltbWFwICAgICAgICAgICA6ICAxLCAvKiBpbmNsdWRlIG1tYXAgZGF0YSAgICAgKi8KLQkJCQljb21tCSAgICAgICA6ICAxLCAvKiBpbmNsdWRlIGNvbW0gZGF0YSAgICAgKi8KLQkJCQlmcmVxICAgICAgICAgICA6ICAxLCAvKiB1c2UgZnJlcSwgbm90IHBlcmlvZCAgKi8KLQkJCQlpbmhlcml0X3N0YXQgICA6ICAxLCAvKiBwZXIgdGFzayBjb3VudHMgICAgICAgKi8KLQkJCQllbmFibGVfb25fZXhlYyA6ICAxLCAvKiBuZXh0IGV4ZWMgZW5hYmxlcyAgICAgKi8KLQkJCQl0YXNrICAgICAgICAgICA6ICAxLCAvKiB0cmFjZSBmb3JrL2V4aXQgICAgICAgKi8KLQkJCQl3YXRlcm1hcmsgICAgICA6ICAxLCAvKiB3YWtldXBfd2F0ZXJtYXJrICAgICAgKi8KLQotCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDk7Ci0KLQl1bmlvbiB7Ci0JCV9fdTMyCQl3YWtldXBfZXZlbnRzOwkgIC8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLwotCQlfX3UzMgkJd2FrZXVwX3dhdGVybWFyazsgLyogYnl0ZXMgYmVmb3JlIHdha2V1cCAgICovCi0JfTsKLQlfX3UzMgkJCV9fcmVzZXJ2ZWRfMjsKLQotCV9fdTY0CQkJX19yZXNlcnZlZF8zOwotfTsKLQotLyoKLSAqIElvY3RscyB0aGF0IGNhbiBiZSBkb25lIG9uIGEgcGVyZiBjb3VudGVyIGZkOgotICovCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfRU5BQkxFCQlfSU8gKCckJywgMCkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19ESVNBQkxFCV9JTyAoJyQnLCAxKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1JFRlJFU0gJX0lPICgnJCcsIDIpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUkVTRVQJCV9JTyAoJyQnLCAzKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1BFUklPRAkJX0lPVygnJCcsIDQsIHU2NCkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19TRVRfT1VUUFVUCV9JTyAoJyQnLCA1KQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1NFVF9GSUxURVIJX0lPVygnJCcsIDYsIGNoYXIgKikKLQotZW51bSBwZXJmX2NvdW50ZXJfaW9jX2ZsYWdzIHsKLQlQRVJGX0lPQ19GTEFHX0dST1VQCQk9IDFVIDw8IDAsCi19OwotCi0vKgotICogU3RydWN0dXJlIG9mIHRoZSBwYWdlIHRoYXQgY2FuIGJlIG1hcHBlZCB2aWEgbW1hcAotICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSB7Ci0JX191MzIJdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgc3RydWN0dXJlICovCi0JX191MzIJY29tcGF0X3ZlcnNpb247CQkvKiBsb3dlc3QgdmVyc2lvbiB0aGlzIGlzIGNvbXBhdCB3aXRoICovCi0KLQkvKgotCSAqIEJpdHMgbmVlZGVkIHRvIHJlYWQgdGhlIGh3IGNvdW50ZXJzIGluIHVzZXItc3BhY2UuCi0JICoKLQkgKiAgIHUzMiBzZXE7Ci0JICogICBzNjQgY291bnQ7Ci0JICoKLQkgKiAgIGRvIHsKLQkgKiAgICAgc2VxID0gcGMtPmxvY2s7Ci0JICoKLQkgKiAgICAgYmFycmllcigpCi0JICogICAgIGlmIChwYy0+aW5kZXgpIHsKLQkgKiAgICAgICBjb3VudCA9IHBtY19yZWFkKHBjLT5pbmRleCAtIDEpOwotCSAqICAgICAgIGNvdW50ICs9IHBjLT5vZmZzZXQ7Ci0JICogICAgIH0gZWxzZQotCSAqICAgICAgIGdvdG8gcmVndWxhcl9yZWFkOwotCSAqCi0JICogICAgIGJhcnJpZXIoKTsKLQkgKiAgIH0gd2hpbGUgKHBjLT5sb2NrICE9IHNlcSk7Ci0JICoKLQkgKiBOT1RFOiBmb3Igb2J2aW91cyByZWFzb24gdGhpcyBvbmx5IHdvcmtzIG9uIHNlbGYtbW9uaXRvcmluZwotCSAqICAgICAgIHByb2Nlc3Nlcy4KLQkgKi8KLQlfX3UzMglsb2NrOwkJCS8qIHNlcWxvY2sgZm9yIHN5bmNocm9uaXphdGlvbiAqLwotCV9fdTMyCWluZGV4OwkJCS8qIGhhcmR3YXJlIGNvdW50ZXIgaWRlbnRpZmllciAqLwotCV9fczY0CW9mZnNldDsJCQkvKiBhZGQgdG8gaGFyZHdhcmUgY291bnRlciB2YWx1ZSAqLwotCV9fdTY0CXRpbWVfZW5hYmxlZDsJCS8qIHRpbWUgY291bnRlciBhY3RpdmUgKi8KLQlfX3U2NAl0aW1lX3J1bm5pbmc7CQkvKiB0aW1lIGNvdW50ZXIgb24gY3B1ICovCi0KLQkJLyoKLQkJICogSG9sZSBmb3IgZXh0ZW5zaW9uIG9mIHRoZSBzZWxmIG1vbml0b3IgY2FwYWJpbGl0aWVzCi0JCSAqLwotCi0JX191NjQJX19yZXNlcnZlZFsxMjNdOwkvKiBhbGlnbiB0byAxayAqLwotCi0JLyoKLQkgKiBDb250cm9sIGRhdGEgZm9yIHRoZSBtbWFwKCkgZGF0YSBidWZmZXIuCi0JICoKLQkgKiBVc2VyLXNwYWNlIHJlYWRpbmcgdGhlIEBkYXRhX2hlYWQgdmFsdWUgc2hvdWxkIGlzc3VlIGFuIHJtYigpLCBvbgotCSAqIFNNUCBjYXBhYmxlIHBsYXRmb3JtcywgYWZ0ZXIgcmVhZGluZyB0aGlzIHZhbHVlIC0tIHNlZQotCSAqIHBlcmZfY291bnRlcl93YWtldXAoKS4KLQkgKgotCSAqIFdoZW4gdGhlIG1hcHBpbmcgaXMgUFJPVF9XUklURSB0aGUgQGRhdGFfdGFpbCB2YWx1ZSBzaG91bGQgYmUKLQkgKiB3cml0dGVuIGJ5IHVzZXJzcGFjZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlYWQgZGF0YS4gSW4gdGhpcyBjYXNlCi0JICogdGhlIGtlcm5lbCB3aWxsIG5vdCBvdmVyLXdyaXRlIHVucmVhZCBkYXRhLgotCSAqLwotCV9fdTY0ICAgZGF0YV9oZWFkOwkJLyogaGVhZCBpbiB0aGUgZGF0YSBzZWN0aW9uICovCi0JX191NjQJZGF0YV90YWlsOwkJLyogdXNlci1zcGFjZSB3cml0dGVuIHRhaWwgKi8KLX07Ci0KLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfTUFTSwkJKDMgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfVU5LTk9XTgkJKDAgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19VU0VSCQkJKDIgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0hZUEVSVklTT1IJCSgzIDw8IDApCi0KLXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciB7Ci0JX191MzIJdHlwZTsKLQlfX3UxNgltaXNjOwotCV9fdTE2CXNpemU7Ci19OwotCi1lbnVtIHBlcmZfZXZlbnRfdHlwZSB7Ci0KLQkvKgotCSAqIFRoZSBNTUFQIGV2ZW50cyByZWNvcmQgdGhlIFBST1RfRVhFQyBtYXBwaW5ncyBzbyB0aGF0IHdlIGNhbgotCSAqIGNvcnJlbGF0ZSB1c2Vyc3BhY2UgSVBzIHRvIGNvZGUuIFRoZXkgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKLQkgKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXUzMgkJCQlwaWQsIHRpZDsKLQkgKgl1NjQJCQkJYWRkcjsKLQkgKgl1NjQJCQkJbGVuOwotCSAqCXU2NAkJCQlwZ29mZjsKLQkgKgljaGFyCQkJCWZpbGVuYW1lW107Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX01NQVAJCQk9IDEsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1NjQJCQkJaWQ7Ci0JICoJdTY0CQkJCWxvc3Q7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX0xPU1QJCQk9IDIsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXUzMgkJCQlwaWQsIHRpZDsKLQkgKgljaGFyCQkJCWNvbW1bXTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfQ09NTQkJCT0gMywKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXUzMgkJCQlwaWQsIHBwaWQ7Ci0JICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl1NjQJCQkJdGltZTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfRVhJVAkJCT0gNCwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXU2NAkJCQl0aW1lOwotCSAqCXU2NAkJCQlpZDsKLQkgKgl1NjQJCQkJc3RyZWFtX2lkOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9USFJPVFRMRQkJPSA1LAotCVBFUkZfRVZFTlRfVU5USFJPVFRMRQkJPSA2LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTMyCQkJCXBpZCwgcHBpZDsKLQkgKgl1MzIJCQkJdGlkLCBwdGlkOwotCSAqCXU2NAkJCQl0aW1lOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9GT1JLCQkJPSA3LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTMyCQkJCXBpZCwgdGlkOwotCSAqCi0JICoJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX1JFQUQJCQk9IDgsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXsgdTY0CQkJaXA7CSAgfSAmJiBQRVJGX1NBTVBMRV9JUAotCSAqCXsgdTMyCQkJcGlkLCB0aWQ7IH0gJiYgUEVSRl9TQU1QTEVfVElECi0JICoJeyB1NjQJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCi0JICoJeyB1NjQJCQlhZGRyOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9BRERSCi0JICoJeyB1NjQJCQlpZDsJICB9ICYmIFBFUkZfU0FNUExFX0lECi0JICoJeyB1NjQJCQlzdHJlYW1faWQ7fSAmJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQKLQkgKgl7IHUzMgkJCWNwdSwgcmVzOyB9ICYmIFBFUkZfU0FNUExFX0NQVQotCSAqCXsgdTY0CQkJcGVyaW9kOyAgIH0gJiYgUEVSRl9TQU1QTEVfUEVSSU9ECi0JICoKLQkgKgl7IHN0cnVjdCByZWFkX2Zvcm1hdAl2YWx1ZXM7CSAgfSAmJiBQRVJGX1NBTVBMRV9SRUFECi0JICoKLQkgKgl7IHU2NAkJCW5yLAotCSAqCSAgdTY0CQkJaXBzW25yXTsgIH0gJiYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOCi0JICoKLQkgKgkjCi0JICoJIyBUaGUgUkFXIHJlY29yZCBiZWxvdyBpcyBvcGFxdWUgZGF0YSB3cnQgdGhlIEFCSQotCSAqCSMKLQkgKgkjIFRoYXQgaXMsIHRoZSBBQkkgZG9lc24ndCBtYWtlIGFueSBwcm9taXNlcyB3cnQgdG8KLQkgKgkjIHRoZSBzdGFiaWxpdHkgb2YgaXRzIGNvbnRlbnQsIGl0IG1heSB2YXJ5IGRlcGVuZGluZwotCSAqCSMgb24gZXZlbnQsIGhhcmR3YXJlLCBrZXJuZWwgdmVyc2lvbiBhbmQgcGhhc2Ugb2YKLQkgKgkjIHRoZSBtb29uLgotCSAqCSMKLQkgKgkjIEluIG90aGVyIHdvcmRzLCBQRVJGX1NBTVBMRV9SQVcgY29udGVudHMgYXJlIG5vdCBhbiBBQkkuCi0JICoJIwotCSAqCi0JICoJeyB1MzIJCQlzaXplOwotCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9TQU1QTEUJCT0gOSwKLQotCVBFUkZfRVZFTlRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLWVudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7Ci0JUEVSRl9DT05URVhUX0hWCQkJPSAoX191NjQpLTMyLAotCVBFUkZfQ09OVEVYVF9LRVJORUwJCT0gKF9fdTY0KS0xMjgsCi0JUEVSRl9DT05URVhUX1VTRVIJCT0gKF9fdTY0KS01MTIsCi0KLQlQRVJGX0NPTlRFWFRfR1VFU1QJCT0gKF9fdTY0KS0yMDQ4LAotCVBFUkZfQ09OVEVYVF9HVUVTVF9LRVJORUwJPSAoX191NjQpLTIxNzYsCi0JUEVSRl9DT05URVhUX0dVRVNUX1VTRVIJCT0gKF9fdTY0KS0yNTYwLAotCi0JUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCi19OwotCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkJKDFVIDw8IDApCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJCSgxVSA8PCAxKQotCi0vKgotICogSW4gY2FzZSBzb21lIGFwcCBzdGlsbCByZWZlcmVuY2VzIHRoZSBvbGQgc3ltYm9sczoKLSAqLwotCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCV9fTlJfcGVyZl9ldmVudF9vcGVuCi0KLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19FTkFCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUKLQotI2VuZGlmIC8qIF9MSU5VWF9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGU3MGU2MjEuLmE2ODYxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMxNSw4ICszMTUsOSBAQAogCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwogCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KIAl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7Ci0JLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCi0JcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwkvKiBnZXQgcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MsIHZhbHVlIHJldHVybmVkIGlzIG1hbmFnZWQgYnkKKwkgKiBxdW90YSBjb2RlIG9ubHkgKi8KKwlxc2l6ZV90ICooKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggYzRiYTlhNy4uOTZjYzMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTEwMSw0ICsxMDEsOSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCByY3VfcHJlZW1wdF9kZXB0aCh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYzkzZWVlNS4uODA0NGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiBleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3JjdSh2b2lkKTsKIAorLyoKKyAqIERlZmluZWQgYXMgbWFjcm8gYXMgaXQgaXMgYSB2ZXJ5IGxvdyBsZXZlbCBoZWFkZXIKKyAqIGluY2x1ZGVkIGZyb20gYXJlYXMgdGhhdCBkb24ndCBldmVuIGtub3cgYWJvdXQgY3VycmVudAorICovCisjZGVmaW5lIHJjdV9wcmVlbXB0X2RlcHRoKCkgKGN1cnJlbnQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykKKwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKQEAgLTYzLDYgKzY5LDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9wcmVlbXB0X2RlcHRoKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9ja19iaCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IGU4OTg1NzguLmYyZjg0MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTE5Miw2ICsxOTIsMTIgQEAKICNkZWZpbmUgVEFTS19ERUFECQk2NAogI2RlZmluZSBUQVNLX1dBS0VLSUxMCQkxMjgKICNkZWZpbmUgVEFTS19XQUtJTkcJCTI1NgorI2RlZmluZSBUQVNLX1NUQVRFX01BWAkJNTEyCisKKyNkZWZpbmUgVEFTS19TVEFURV9UT19DSEFSX1NUUiAiUlNEVHRaWHhLVyIKKworZXh0ZXJuIGNoYXIgX19fYXNzZXJ0X3Rhc2tfc3RhdGVbMSAtIDIqISEoCisJCXNpemVvZihUQVNLX1NUQVRFX1RPX0NIQVJfU1RSKS0xICE9IGlsb2cyKFRBU0tfU1RBVEVfTUFYKSsxKV07CiAKIC8qIENvbnZlbmllbmNlIG1hY3JvcyBmb3IgdGhlIHNha2Ugb2Ygc2V0X3Rhc2tfc3RhdGUgKi8KICNkZWZpbmUgVEFTS19LSUxMQUJMRQkJKFRBU0tfV0FLRUtJTEwgfCBUQVNLX1VOSU5URVJSVVBUSUJMRSkKQEAgLTEwOTEsNyArMTA5Nyw4IEBACiAJCQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSk7CiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7Ci0Jdm9pZCAoKnRhc2tfd2FrZV91cCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwl2b2lkICgqdGFza193YWtpbmcpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisJdm9pZCAoKnRhc2tfd29rZW4pIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIAl2b2lkICgqc2V0X2NwdXNfYWxsb3dlZCkoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3bWFzayk7CkBAIC0xMTE1LDcgKzExMjIsNyBAQAogCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi0Jdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKwl2b2lkICgqbW92ZWRfZ3JvdXApIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBvbl9ycSk7CiAjZW5kaWYKIH07CiAKQEAgLTI1OTQsOCArMjYwMSw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAKLSNkZWZpbmUgVEFTS19TVEFURV9UT19DSEFSX1NUUiAiUlNEVHRaWCIKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggOWQ2OGZlZC4uY2ZhODMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtOTksOCArOTksOSBAQAogdm9pZCBzeXNmc19yZW1vdmVfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cik7CiAKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7Ci12b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7Cit2b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKIAogaW50IF9fbXVzdF9jaGVjayBzeXNmc19jcmVhdGVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmplY3QgKnRhcmdldCwKIAkJCQkgICBjb25zdCBjaGFyICpuYW1lKTsKQEAgLTE3NSwxMyArMTc2LDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCisJCQkJCWNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCQkgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCisJCQkJCSBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCBhY2Y2ZTQ1Li4xODE5Mzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAogI2RlZmluZSBTRVJJQUxfVFRZX01BSk9SCTE4OAkvKiBOaWNlIGxlZ2FsIG51bWJlciBub3cgKi8KICNkZWZpbmUgU0VSSUFMX1RUWV9NSU5PUlMJMjU0CS8qIGxvYWRzIG9mIGRldmljZXMgOikgKi8KQEAgLTk0LDcgKzk1LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkqYnVsa19vdXRfYnVmZmVyOwogCWludAkJCWJ1bGtfb3V0X3NpemU7CiAJc3RydWN0IHVyYgkJKndyaXRlX3VyYjsKLQlzdHJ1Y3Qga2ZpZm8JCSp3cml0ZV9maWZvOworCXN0cnVjdCBrZmlmbwkJd3JpdGVfZmlmbzsKIAlpbnQJCQl3cml0ZV91cmJfYnVzeTsKIAlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDczOTRlM2IuLmZmOTJiNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8c2NzaS9pc2NzaV9wcm90by5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfaWYuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CkBAIC0yMzEsNyArMjMyLDcgQEAKIH07CiAKIHN0cnVjdCBpc2NzaV9wb29sIHsKLQlzdHJ1Y3Qga2ZpZm8JCSpxdWV1ZTsJCS8qIEZJRk8gUXVldWUgKi8KKwlzdHJ1Y3Qga2ZpZm8JCXF1ZXVlOwkJLyogRklGTyBRdWV1ZSAqLwogCXZvaWQJCQkqKnBvb2w7CQkvKiBQb29sIG9mIGVsZW1lbnRzICovCiAJaW50CQkJbWF4OwkJLyogTWF4IG51bWJlciBvZiBlbGVtZW50cyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAppbmRleCA5ZTMxODJlLi43NDFhZTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCkBAIC04MCw3ICs4MCw3IEBACiAJaW50CQkJZGF0YV9vZmZzZXQ7CiAJc3RydWN0IGlzY3NpX3IydF9pbmZvCSpyMnQ7CQkvKiBpbiBwcm9ncmVzcyBzb2xpY3QgUjJUICovCiAJc3RydWN0IGlzY3NpX3Bvb2wJcjJ0cG9vbDsKLQlzdHJ1Y3Qga2ZpZm8JCSpyMnRxdWV1ZTsKKwlzdHJ1Y3Qga2ZpZm8JCXIydHF1ZXVlOwogCXZvaWQJCQkqZGRfZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJzcnAuaCBiL2luY2x1ZGUvc2NzaS9saWJzcnAuaAppbmRleCBiYTYxNWU0Li4wN2UzYWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGlic3JwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYnNycC5oCkBAIC0yMSw3ICsyMSw3IEBACiBzdHJ1Y3Qgc3JwX3F1ZXVlIHsKIAl2b2lkICpwb29sOwogCXZvaWQgKml0ZW1zOwotCXN0cnVjdCBrZmlmbyAqcXVldWU7CisJc3RydWN0IGtmaWZvIHF1ZXVlOwogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDRjMDBlZGM1Li5iMzdkMzRiIDEwMDY0NAotLS0gYS9pbml0L2luaXRyYW1mcy5jCisrKyBiL2luaXQvaW5pdHJhbWZzLmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiBzdGF0aWMgY2hhciAqIF9faW5pdCB1bnBhY2tfdG9fcm9vdGZzKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQogewotCWludCB3cml0dGVuOworCWludCB3cml0dGVuLCByZXM7CiAJZGVjb21wcmVzc19mbiBkZWNvbXByZXNzOwogCWNvbnN0IGNoYXIgKmNvbXByZXNzX25hbWU7CiAJc3RhdGljIF9faW5pdGRhdGEgY2hhciBtc2dfYnVmWzY0XTsKQEAgLTQ0NSwxMCArNDQ1LDEyIEBACiAJCX0KIAkJdGhpc19oZWFkZXIgPSAwOwogCQlkZWNvbXByZXNzID0gZGVjb21wcmVzc19tZXRob2QoYnVmLCBsZW4sICZjb21wcmVzc19uYW1lKTsKLQkJaWYgKGRlY29tcHJlc3MpCi0JCQlkZWNvbXByZXNzKGJ1ZiwgbGVuLCBOVUxMLCBmbHVzaF9idWZmZXIsIE5VTEwsCisJCWlmIChkZWNvbXByZXNzKSB7CisJCQlyZXMgPSBkZWNvbXByZXNzKGJ1ZiwgbGVuLCBOVUxMLCBmbHVzaF9idWZmZXIsIE5VTEwsCiAJCQkJICAgJm15X2lucHRyLCBlcnJvcik7Ci0JCWVsc2UgaWYgKGNvbXByZXNzX25hbWUpIHsKKwkJCWlmIChyZXMpCisJCQkJZXJyb3IoImRlY29tcHJlc3NvciBmYWlsZWQiKTsKKwkJfSBlbHNlIGlmIChjb21wcmVzc19uYW1lKSB7CiAJCQlpZiAoIW1lc3NhZ2UpIHsKIAkJCQlzbnByaW50Zihtc2dfYnVmLCBzaXplb2YgbXNnX2J1ZiwKIAkJCQkJICJjb21wcmVzc2lvbiBtZXRob2QgJXMgbm90IGNvbmZpZ3VyZWQiLApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBjM2RiNGE5Li5kYWM0NGE5IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzY5LDEyICszNjksNiBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAKLQkvKgotCSAqIFNldCB1cCB0aGUgY3VycmVudCBDUFUgYXMgcG9zc2libGUgdG8gbWlncmF0ZSB0by4KLQkgKiBUaGUgb3RoZXIgb25lcyB3aWxsIGJlIGRvbmUgYnkgY3B1X3VwL2NwdV9kb3duKCkKLQkgKi8KLQlzZXRfY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCksIHRydWUpOwotCiAJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlIC0tUlIgKi8KIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJaWYgKG51bV9vbmxpbmVfY3B1cygpID49IHNldHVwX21heF9jcHVzKQpAQCAtNDg2LDYgKzQ4MCw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkvKiBNYXJrIHRoZSBib290IGNwdSAicHJlc2VudCIsICJvbmxpbmUiIGV0YyBmb3IgU01QIGFuZCBVUCBjYXNlICovCiAJc2V0X2NwdV9vbmxpbmUoY3B1LCB0cnVlKTsKKwlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwogCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDI0NTFkYzYuLjRiMDViZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCW93bmVyLT5yb290ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSBqID0gMDsgaSA8IHNpemU7IGkrKywgaisrKSB7CisJZm9yIChpID0gaiA9IDA7IGogPD0gc2l6ZTsgaSsrLCBqKyspIHsKIAkJc3RydWN0IGF1ZGl0X3RyZWUgKnM7CiAJCWlmICgmY2h1bmstPm93bmVyc1tqXSA9PSBwKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZiAoIXMpIC8qIHJlc3VsdCBvZiBlYXJsaWVyIGZhbGxiYWNrICovCiAJCQljb250aW51ZTsKIAkJZ2V0X3RyZWUocyk7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZjaHVuay0+b3duZXJzW2ldLmxpc3QsICZuZXctPm93bmVyc1tqXS5saXN0KTsKKwkJbGlzdF9yZXBsYWNlX2luaXQoJmNodW5rLT5vd25lcnNbal0ubGlzdCwgJm5ldy0+b3duZXJzW2ldLmxpc3QpOwogCX0KIAogCWxpc3RfcmVwbGFjZV9yY3UoJmNodW5rLT5oYXNoLCAmbmV3LT5oYXNoKTsKQEAgLTM3MywxNSArMzczLDE3IEBACiAJZm9yIChuID0gMDsgbiA8IG9sZC0+Y291bnQ7IG4rKykgewogCQlpZiAob2xkLT5vd25lcnNbbl0ub3duZXIgPT0gdHJlZSkgewogCQkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCQlwdXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CisJCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAogCWNodW5rID0gYWxsb2NfY2h1bmsob2xkLT5jb3VudCArIDEpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAlpZiAoaW5vdGlmeV9jbG9uZV93YXRjaCgmb2xkLT53YXRjaCwgJmNodW5rLT53YXRjaCkgPCAwKSB7CkBAIC00MjUsNyArNDI3LDggQEAKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAlpbm90aWZ5X2V2aWN0X3dhdGNoKCZvbGQtPndhdGNoKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOyAvKiBwYWlyIHRvIGlub3RpZnlfZmluZF93YXRjaCAqLworCXB1dF9pbm90aWZ5X3dhdGNoKCZvbGQtPndhdGNoKTsgLyogYW5kIGtpbGwgaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggMjY3ZTQ4NC4uZmMwZjkyOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0yNTAsNyArMjUwLDYgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDRcMDAyXDAwNlwwMDYiWyh4KSZPX0FDQ01PREVdKQogc3RhdGljIGlubGluZSBpbnQgb3Blbl9hcmcoaW50IGZsYWdzLCBpbnQgbWFzaykKIHsKIAlpbnQgbiA9IEFDQ19NT0RFKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCAyOTFhYzU4Li4xYzhkZGQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljcHVfaG90cGx1Z19iZWdpbigpOworCXNldF9jcHVfYWN0aXZlKGNwdSwgZmFsc2UpOwogCWVyciA9IF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fUFJFUEFSRSB8IG1vZCwKIAkJCQkJaGNwdSwgLTEsICZucl9jYWxscyk7CiAJaWYgKGVyciA9PSBOT1RJRllfQkFEKSB7CkBAIC0yODAsMTggKzI4MSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNldF9jcHVfYWN0aXZlKGNwdSwgZmFsc2UpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGFsbCBjcHVzIGRpZCB0aGUgcmVzY2hlZHVsZSBhbmQgYXJlIG5vdAotCSAqIHVzaW5nIHN0YWxlIHZlcnNpb24gb2YgdGhlIGNwdV9hY3RpdmVfbWFzay4KLQkgKiBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYmVjdWFzZSBzdG9wX21hY2hpbmUoKQotCSAqIHRoYXQgd2UgcnVuIGRvd24gdGhlIGxpbmUgYWxyZWFkeSBwcm92aWRlcyB0aGUgcmVxdWlyZWQKLQkgKiBzeW5jaHJvbml6YXRpb24uIEJ1dCBpdCdzIHJlYWxseSBhIHNpZGUgZWZmZWN0IGFuZCB3ZSBkbyBub3QKLQkgKiB3YW50IHRvIGRlcGVuZCBvbiB0aGUgaW5uYXJkcyBvZiB0aGUgc3RvcF9tYWNoaW5lIGhlcmUuCi0JICovCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQogCWVyciA9IF9jcHVfZG93bihjcHUsIDApOwogCiBvdXQ6CkBAIC0zODIsMTkgKzM3MSwxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CiAJZmlyc3RfY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwotCS8qIFdlIHRha2UgZG93biBhbGwgb2YgdGhlIG5vbi1ib290IENQVXMgaW4gb25lIHNob3QgdG8gYXZvaWQgcmFjZXMKKwkvKgorCSAqIFdlIHRha2UgZG93biBhbGwgb2YgdGhlIG5vbi1ib290IENQVXMgaW4gb25lIHNob3QgdG8gYXZvaWQgcmFjZXMKIAkgKiB3aXRoIHRoZSB1c2Vyc3BhY2UgdHJ5aW5nIHRvIHVzZSB0aGUgQ1BVIGhvdHBsdWcgYXQgdGhlIHNhbWUgdGltZQogCSAqLwogCWNwdW1hc2tfY2xlYXIoZnJvemVuX2NwdXMpOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBmaXJzdF9jcHUpCi0JCQljb250aW51ZTsKLQkJc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7Ci0JfQotCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQogCXByaW50aygiRGlzYWJsaW5nIG5vbi1ib290IENQVXMgLi4uXG4iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGZpcnN0X2NwdSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZmlmby5jIGIva2VybmVsL2tmaWZvLmMKaW5kZXggMzc2NWZmMy4uZTkyZDUxOSAxMDA2NDQKLS0tIGEva2VybmVsL2tmaWZvLmMKKysrIGIva2VybmVsL2tmaWZvLmMKQEAgLTEsNiArMSw3IEBACiAvKgotICogQSBzaW1wbGUga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCisgKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbmkgU2VpYm9sZCA8c3RlZmFuaUBzZWlib2xkLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSw1MCArMjYsNDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK3N0YXRpYyB2b2lkIF9rZmlmb19pbml0KHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQl1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlmaWZvLT5idWZmZXIgPSBidWZmZXI7CisJZmlmby0+c2l6ZSA9IHNpemU7CisKKwlrZmlmb19yZXNldChmaWZvKTsKK30KIAogLyoqCi0gKiBrZmlmb19pbml0IC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gdXNpbmcgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyCisgKiBrZmlmb19pbml0IC0gaW5pdGlhbGl6ZSBhIEZJRk8gdXNpbmcgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZSBidWZmZXIKICAqIEBidWZmZXI6IHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyIHRvIGJlIHVzZWQuCiAgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgdGhpcyBoYXZlIHRvIGJlIGEgcG93ZXIgb2YgMi4KLSAqIEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGttYWxsb2MoKQotICogQGxvY2s6IHRoZSBsb2NrIHRvIGJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgZmlmbyBidWZmZXIKICAqCi0gKiBEbyBOT1QgcGFzcyB0aGUga2ZpZm8gdG8ga2ZpZm9fZnJlZSgpIGFmdGVyIHVzZSEgU2ltcGx5IGZyZWUgdGhlCi0gKiAmc3RydWN0IGtmaWZvIHdpdGgga2ZyZWUoKS4KICAqLwotc3RydWN0IGtmaWZvICprZmlmb19pbml0KHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUsCi0JCQkgZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCit2b2lkIGtmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQogewotCXN0cnVjdCBrZmlmbyAqZmlmbzsKLQogCS8qIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KIAlCVUdfT04oIWlzX3Bvd2VyX29mXzIoc2l6ZSkpOwogCi0JZmlmbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZmlmbyksIGdmcF9tYXNrKTsKLQlpZiAoIWZpZm8pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JZmlmby0+YnVmZmVyID0gYnVmZmVyOwotCWZpZm8tPnNpemUgPSBzaXplOwotCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKLQlmaWZvLT5sb2NrID0gbG9jazsKLQotCXJldHVybiBmaWZvOworCV9rZmlmb19pbml0KGZpZm8sIGJ1ZmZlciwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmaWZvX2luaXQpOwogCiAvKioKLSAqIGtmaWZvX2FsbG9jIC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gYW5kIGl0cyBpbnRlcm5hbCBidWZmZXIKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZC4KKyAqIGtmaWZvX2FsbG9jIC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gaW50ZXJuYWwgYnVmZmVyCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZW4gbmV3IGJ1ZmZlcgorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLCB0aGlzIGhhdmUgdG8gYmUgYSBwb3dlciBvZiAyLgogICogQGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8ga21hbGxvYygpCi0gKiBAbG9jazogdGhlIGxvY2sgdG8gYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbmV3IGZpZm8gaW50ZXJuYWwgYnVmZmVyCiAgKgogICogVGhlIHNpemUgd2lsbCBiZSByb3VuZGVkLXVwIHRvIGEgcG93ZXIgb2YgMi4KKyAqIFRoZSBidWZmZXIgd2lsbCBiZSByZWxlYXNlIHdpdGgga2ZpZm9fZnJlZSgpLgorICogUmV0dXJuIDAgaWYgbm8gZXJyb3IsIG90aGVyd2lzZSB0aGUgYW4gZXJyb3IgY29kZQogICovCi1zdHJ1Y3Qga2ZpZm8gKmtmaWZvX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaywgc3BpbmxvY2tfdCAqbG9jaykKK2ludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaykKIHsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0Jc3RydWN0IGtmaWZvICpyZXQ7CiAKIAkvKgogCSAqIHJvdW5kIHVwIHRvIHRoZSBuZXh0IHBvd2VyIG9mIDIsIHNpbmNlIG91ciAnbGV0IHRoZSBpbmRpY2VzCkBAIC04MCw0OSArNzksNDcgQEAKIAl9CiAKIAlidWZmZXIgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKCFidWZmZXIpIHsKKwkJX2tmaWZvX2luaXQoZmlmbywgMCwgMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCXJldCA9IGtmaWZvX2luaXQoYnVmZmVyLCBzaXplLCBnZnBfbWFzaywgbG9jayk7CisJX2tmaWZvX2luaXQoZmlmbywgYnVmZmVyLCBzaXplKTsKIAotCWlmIChJU19FUlIocmV0KSkKLQkJa2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGtmaWZvX2FsbG9jKTsKIAogLyoqCi0gKiBrZmlmb19mcmVlIC0gZnJlZXMgdGhlIEZJRk8KKyAqIGtmaWZvX2ZyZWUgLSBmcmVlcyB0aGUgRklGTyBpbnRlcm5hbCBidWZmZXIKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBmcmVlZC4KICAqLwogdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKIAlrZnJlZShmaWZvLT5idWZmZXIpOwotCWtmcmVlKGZpZm8pOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19mcmVlKTsKIAogLyoqCi0gKiBfX2tmaWZvX3B1dCAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8sIG5vIGxvY2tpbmcgdmVyc2lvbgorICoga2ZpZm9fc2tpcCAtIHNraXAgb3V0cHV0IGRhdGEKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGJ1ZmZlcjogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAYnVmZmVyIGludG8KLSAqIHRoZSBGSUZPIGRlcGVuZGluZyBvbiB0aGUgZnJlZSBzcGFjZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgotICogYnl0ZXMgY29waWVkLgotICoKLSAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcAogICovCi11bnNpZ25lZCBpbnQgX19rZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBrZmlmb19za2lwKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuIDwga2ZpZm9fbGVuKGZpZm8pKSB7CisJCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOworCQlyZXR1cm47CisJfQorCWtmaWZvX3Jlc2V0X291dChmaWZvKTsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fc2tpcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2luX2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAorCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQogewogCXVuc2lnbmVkIGludCBsOwogCi0JbGVuID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIGZpZm8tPmluICsgZmlmby0+b3V0KTsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5vdXQgaW5kZXggLWJlZm9yZS0gd2UKIAkgKiBzdGFydCBwdXR0aW5nIGJ5dGVzIGludG8gdGhlIGtmaWZvLgpAQCAtMTMwLDQ1ICsxMjcsMjEgQEAKIAogCXNtcF9tYigpOwogCisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+aW4gKyBvZmYpOworCiAJLyogZmlyc3QgcHV0IHRoZSBkYXRhIHN0YXJ0aW5nIGZyb20gZmlmby0+aW4gdG8gYnVmZmVyIGVuZCAqLwotCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gKGZpZm8tPmluICYgKGZpZm8tPnNpemUgLSAxKSkpOwotCW1lbWNweShmaWZvLT5idWZmZXIgKyAoZmlmby0+aW4gJiAoZmlmby0+c2l6ZSAtIDEpKSwgYnVmZmVyLCBsKTsKKwlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7CisJbWVtY3B5KGZpZm8tPmJ1ZmZlciArIG9mZiwgZnJvbSwgbCk7CiAKIAkvKiB0aGVuIHB1dCB0aGUgcmVzdCAoaWYgYW55KSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQltZW1jcHkoZmlmby0+YnVmZmVyLCBidWZmZXIgKyBsLCBsZW4gLSBsKTsKLQotCS8qCi0JICogRW5zdXJlIHRoYXQgd2UgYWRkIHRoZSBieXRlcyB0byB0aGUga2ZpZm8gLWJlZm9yZS0KLQkgKiB3ZSB1cGRhdGUgdGhlIGZpZm8tPmluIGluZGV4LgotCSAqLwotCi0Jc21wX3dtYigpOwotCi0JZmlmby0+aW4gKz0gbGVuOwotCi0JcmV0dXJuIGxlbjsKKwltZW1jcHkoZmlmby0+YnVmZmVyLCBmcm9tICsgbCwgbGVuIC0gbCk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fcHV0KTsKIAotLyoqCi0gKiBfX2tmaWZvX2dldCAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIEZJRk8sIG5vIGxvY2tpbmcgdmVyc2lvbgotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KLSAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotdW5zaWduZWQgaW50IF9fa2ZpZm9fZ2V0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19vdXRfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQogewogCXVuc2lnbmVkIGludCBsOwogCi0JbGVuID0gbWluKGxlbiwgZmlmby0+aW4gLSBmaWZvLT5vdXQpOwotCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPmluIGluZGV4IC1iZWZvcmUtIHdlCiAJICogc3RhcnQgcmVtb3ZpbmcgYnl0ZXMgZnJvbSB0aGUga2ZpZm8uCkBAIC0xNzYsMjIgKzE0OSwyNTIgQEAKIAogCXNtcF9ybWIoKTsKIAorCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPm91dCArIG9mZik7CisKIAkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCi0JbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSAoZmlmby0+b3V0ICYgKGZpZm8tPnNpemUgLSAxKSkpOwotCW1lbWNweShidWZmZXIsIGZpZm8tPmJ1ZmZlciArIChmaWZvLT5vdXQgJiAoZmlmby0+c2l6ZSAtIDEpKSwgbCk7CisJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOworCW1lbWNweSh0bywgZmlmby0+YnVmZmVyICsgb2ZmLCBsKTsKIAogCS8qIHRoZW4gZ2V0IHRoZSByZXN0IChpZiBhbnkpIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JbWVtY3B5KGJ1ZmZlciArIGwsIGZpZm8tPmJ1ZmZlciwgbGVuIC0gbCk7CisJbWVtY3B5KHRvICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXVuc2lnbmVkIGludCBsOworCWludCByZXQ7CiAKIAkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIHJlbW92ZSB0aGUgYnl0ZXMgZnJvbSB0aGUga2ZpZm8gLWJlZm9yZS0KLQkgKiB3ZSB1cGRhdGUgdGhlIGZpZm8tPm91dCBpbmRleC4KKwkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPm91dCBpbmRleCAtYmVmb3JlLSB3ZQorCSAqIHN0YXJ0IHB1dHRpbmcgYnl0ZXMgaW50byB0aGUga2ZpZm8uCiAJICovCiAKIAlzbXBfbWIoKTsKIAotCWZpZm8tPm91dCArPSBsZW47CisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+aW4gKyBvZmYpOworCisJLyogZmlyc3QgcHV0IHRoZSBkYXRhIHN0YXJ0aW5nIGZyb20gZmlmby0+aW4gdG8gYnVmZmVyIGVuZCAqLworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihmaWZvLT5idWZmZXIgKyBvZmYsIGZyb20sIGwpOworCisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQgKyBsZW4gLSBsOworCisJLyogdGhlbiBwdXQgdGhlIHJlc3QgKGlmIGFueSkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGZpZm8tPmJ1ZmZlciwgZnJvbSArIGwsIGxlbiAtIGwpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPmluIGluZGV4IC1iZWZvcmUtIHdlCisJICogc3RhcnQgcmVtb3ZpbmcgYnl0ZXMgZnJvbSB0aGUga2ZpZm8uCisJICovCisKKwlzbXBfcm1iKCk7CisKKwlvZmYgPSBfX2tmaWZvX29mZihmaWZvLCBmaWZvLT5vdXQgKyBvZmYpOworCisJLyogZmlyc3QgZ2V0IHRoZSBkYXRhIGZyb20gZmlmby0+b3V0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwlyZXQgPSBjb3B5X3RvX3VzZXIodG8sIGZpZm8tPmJ1ZmZlciArIG9mZiwgbCk7CisKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldCArIGxlbiAtIGw7CisKKwkvKiB0aGVuIGdldCB0aGUgcmVzdCAoaWYgYW55KSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLworCXJldHVybiBjb3B5X3RvX3VzZXIodG8gKyBsLCBmaWZvLT5idWZmZXIsIGxlbiAtIGwpOworfQorCit1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fYXZhaWwoZmlmbykgPCBsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuICsgMTsKKworCV9fa2ZpZm9faW5fZGF0YShmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2luX24pOworCisvKioKKyAqIGtmaWZvX2luIC0gcHV0cyBzb21lIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBidWZmZXIgaW50bworICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyBjb3BpZWQuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLwordW5zaWduZWQgaW50IGtmaWZvX2luKHN0cnVjdCBrZmlmbyAqZmlmbywgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKwkJCQl1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19hdmFpbChmaWZvKSwgbGVuKTsKKworCV9fa2ZpZm9faW5fZGF0YShmaWZvLCBmcm9tLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX2luKGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9faW4pOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbGVuLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19pbl9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X24oc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fbGVuKGZpZm8pIDwgbGVuICsgcmVjc2l6ZSkKKwkJcmV0dXJuIGxlbjsKKworCV9fa2ZpZm9fb3V0X2RhdGEoZmlmbywgdG8sIGxlbiwgcmVjc2l6ZSk7CisJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbiArIHJlY3NpemUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX291dF9uKTsKKworLyoqCisgKiBrZmlmb19vdXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb19vdXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICp0bywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlsZW4gPSBtaW4oa2ZpZm9fbGVuKGZpZm8pLCBsZW4pOworCisJX19rZmlmb19vdXRfZGF0YShmaWZvLCB0bywgbGVuLCAwKTsKKwlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbGVuKTsKIAogCXJldHVybiBsZW47CiB9Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZ2V0KTsKK0VYUE9SVF9TWU1CT0woa2ZpZm9fb3V0KTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXJldHVybiBfX2tmaWZvX291dF9yZWMoZmlmbywgdG8sIGxlbiwgcmVjc2l6ZSwgdG90YWwpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX291dF9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fYXZhaWwoZmlmbykgPCBsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuICsgMTsKKworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyX24pOworCisvKioKKyAqIGtmaWZvX2Zyb21fdXNlciAtIHB1dHMgc29tZSBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEBmcm9tOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKKyAqIEZJRk8gZGVwZW5kaW5nIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19hdmFpbChmaWZvKSwgbGVuKTsKKwlsZW4gLT0gX19rZmlmb19mcm9tX3VzZXJfZGF0YShmaWZvLCBmcm9tLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX2luKGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fZnJvbV91c2VyKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfcmVjKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyX2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX24oc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJaWYgKGtmaWZvX2xlbihmaWZvKSA8IHJlY2xlbiArIHJlY3NpemUpCisJCXJldHVybiBsZW47CisKKwlyZXQgPSBfX2tmaWZvX3RvX3VzZXJfZGF0YShmaWZvLCB0bywgcmVjbGVuLCByZWNzaXplKTsKKworCWlmIChsaWtlbHkocmV0ID09IDApKQorCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgcmVjbGVuICsgcmVjc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXJfbik7CisKKy8qKgorICoga2ZpZm9fdG9fdXNlciAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb190b191c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4pCit7CisJbGVuID0gbWluKGtmaWZvX2xlbihmaWZvKSwgbGVuKTsKKwlsZW4gLT0gX19rZmlmb190b191c2VyX2RhdGEoZmlmbywgdG8sIGxlbiwgMCk7CisJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fdG9fdXNlcik7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXJldHVybiBfX2tmaWZvX3RvX3VzZXJfcmVjKGZpZm8sIHRvLCBsZW4sIHJlY3NpemUsIHRvdGFsKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb190b191c2VyX2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAocmVjc2l6ZSA9PSAwKQorCQlyZXR1cm4ga2ZpZm9fYXZhaWwoZmlmbyk7CisKKwlyZXR1cm4gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fcGVla19nZW5lcmljKTsKKwordm9pZCBfX2tmaWZvX3NraXBfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fc2tpcF9nZW5lcmljKTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggYWI3YWU1Ny4uZmJiNjIyMiAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xNTAsNiArMTUwLDI5IEBACiBFWFBPUlRfU1lNQk9MKGt0aHJlYWRfY3JlYXRlKTsKIAogLyoqCisgKiBrdGhyZWFkX2JpbmQgLSBiaW5kIGEganVzdC1jcmVhdGVkIGt0aHJlYWQgdG8gYSBjcHUuCisgKiBAcDogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KKyAqIEBjcHU6IGNwdSAobWlnaHQgbm90IGJlIG9ubGluZSwgbXVzdCBiZSBwb3NzaWJsZSkgZm9yIEBrIHRvIHJ1biBvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldF9jcHVzX2FsbG93ZWQoKSwKKyAqIGV4Y2VwdCB0aGF0IEBjcHUgZG9lc24ndCBuZWVkIHRvIGJlIG9ubGluZSwgYW5kIHRoZSB0aHJlYWQgbXVzdCBiZQorICogc3RvcHBlZCAoaS5lLiwganVzdCByZXR1cm5lZCBmcm9tIGt0aHJlYWRfY3JlYXRlKCkpLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLworCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOworCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKK30KK0VYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKKworLyoqCiAgKiBrdGhyZWFkX3N0b3AgLSBzdG9wIGEgdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KICAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDk3ZDFhM2QuLjFmMzgyNzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTM4MSw2ICsxMzgxLDkgQEAKIAkJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKIAkJaHdjID0gJmV2ZW50LT5odzsKIAogCQlpbnRlcnJ1cHRzID0gaHdjLT5pbnRlcnJ1cHRzOwpAQCAtMzI2NSw2ICszMjY4LDkgQEAKIAogc3RhdGljIGludCBwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogeworCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlyZXR1cm4gMDsKKwogCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKIAkJcmV0dXJuIDE7CiAKQEAgLTMyOTAsMTIgKzMyOTYsMTEgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfdGFza19jdHgoJmNwdWN0eC0+Y3R4LCB0YXNrX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQogCWlmICghY3R4KQogCQljdHggPSByY3VfZGVyZWZlcmVuY2UodGFza19ldmVudC0+dGFzay0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X3Rhc2tfY3R4KGN0eCwgdGFza19ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTMzNzIsNiArMzM3Nyw5IEBACiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9jb21tX21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSkKIAkJcmV0dXJuIDE7CiAKQEAgLTM0MDgsMTUgKzM0MTYsMTAgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KIAljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X2NvbW1fY3R4KGN0eCwgY29tbV9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTM0OTEsNiArMzQ5NCw5IEBACiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIubW1hcCkKIAkJcmV0dXJuIDE7CiAKQEAgLTM1NjQsMTUgKzM1NzAsMTAgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfbW1hcF9jdHgoJmNwdWN0eC0+Y3R4LCBtbWFwX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KIAljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X21tYXBfY3R4KGN0eCwgbW1hcF9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlrZnJlZShidWYpOwpAQCAtMzg2Myw2ICszODY0LDkgQEAKIAkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKIAkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIXBlcmZfc3dldmVudF9pc19jb3VudGluZyhldmVudCkpCiAJCXJldHVybiAwOwogCkBAIC00NzIwLDcgKzQ3MjQsNyBAQAogCWlmIChJU19FUlIoZXZlbnQpKQogCQlnb3RvIGVycl9wdXRfY29udGV4dDsKIAotCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2V2ZW50XSIsICZwZXJmX2ZvcHMsIGV2ZW50LCAwKTsKKwllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9ldmVudF0iLCAmcGVyZl9mb3BzLCBldmVudCwgT19SRFdSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfZnJlZV9wdXRfY29udGV4dDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCBkYzE1Njg2Li5hZjk2YzFlNCAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTMwOCwzNyArMzA4LDM3IEBACiAJCQkgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJc3RydWN0IHJlc291cmNlICp0aGlzID0gcm9vdC0+Y2hpbGQ7Ci0JcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7CisJc3RydWN0IHJlc291cmNlIHRtcCA9ICpuZXc7CiAKLQlzdGFydCA9IHJvb3QtPnN0YXJ0OworCXRtcC5zdGFydCA9IHJvb3QtPnN0YXJ0OwogCS8qCiAJICogU2tpcCBwYXN0IGFuIGFsbG9jYXRlZCByZXNvdXJjZSB0aGF0IHN0YXJ0cyBhdCAwLCBzaW5jZSB0aGUgYXNzaWdubWVudAotCSAqIG9mIHRoaXMtPnN0YXJ0IC0gMSB0byBuZXctPmVuZCBiZWxvdyB3b3VsZCBjYXVzZSBhbiB1bmRlcmZsb3cuCisJICogb2YgdGhpcy0+c3RhcnQgLSAxIHRvIHRtcC0+ZW5kIGJlbG93IHdvdWxkIGNhdXNlIGFuIHVuZGVyZmxvdy4KIAkgKi8KIAlpZiAodGhpcyAmJiB0aGlzLT5zdGFydCA9PSAwKSB7Ci0JCXN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKKwkJdG1wLnN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKIAkJdGhpcyA9IHRoaXMtPnNpYmxpbmc7CiAJfQogCWZvcig7OykgewogCQlpZiAodGhpcykKLQkJCWVuZCA9IHRoaXMtPnN0YXJ0IC0gMTsKKwkJCXRtcC5lbmQgPSB0aGlzLT5zdGFydCAtIDE7CiAJCWVsc2UKLQkJCWVuZCA9IHJvb3QtPmVuZDsKLQkJaWYgKHN0YXJ0IDwgbWluKQotCQkJc3RhcnQgPSBtaW47Ci0JCWlmIChlbmQgPiBtYXgpCi0JCQllbmQgPSBtYXg7Ci0JCXN0YXJ0ID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwkJCXRtcC5lbmQgPSByb290LT5lbmQ7CisJCWlmICh0bXAuc3RhcnQgPCBtaW4pCisJCQl0bXAuc3RhcnQgPSBtaW47CisJCWlmICh0bXAuZW5kID4gbWF4KQorCQkJdG1wLmVuZCA9IG1heDsKKwkJdG1wLnN0YXJ0ID0gQUxJR04odG1wLnN0YXJ0LCBhbGlnbik7CiAJCWlmIChhbGlnbmYpCi0JCQlhbGlnbmYoYWxpZ25mX2RhdGEsIG5ldywgc2l6ZSwgYWxpZ24pOwotCQlpZiAoc3RhcnQgPCBlbmQgJiYgZW5kIC0gc3RhcnQgPj0gc2l6ZSAtIDEpIHsKLQkJCW5ldy0+c3RhcnQgPSBzdGFydDsKLQkJCW5ldy0+ZW5kID0gc3RhcnQgKyBzaXplIC0gMTsKKwkJCWFsaWduZihhbGlnbmZfZGF0YSwgJnRtcCwgc2l6ZSwgYWxpZ24pOworCQlpZiAodG1wLnN0YXJ0IDwgdG1wLmVuZCAmJiB0bXAuZW5kIC0gdG1wLnN0YXJ0ID49IHNpemUgLSAxKSB7CisJCQluZXctPnN0YXJ0ID0gdG1wLnN0YXJ0OworCQkJbmV3LT5lbmQgPSB0bXAuc3RhcnQgKyBzaXplIC0gMTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmICghdGhpcykKIAkJCWJyZWFrOwotCQlzdGFydCA9IHRoaXMtPmVuZCArIDE7CisJCXRtcC5zdGFydCA9IHRoaXMtPmVuZCArIDE7CiAJCXRoaXMgPSB0aGlzLT5zaWJsaW5nOwogCX0KIAlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAxOGNjZWVlLi5jNTM1Y2M0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjAwMiwzOSArMjAwMiw2IEBACiAJCXAtPnNjaGVkX2NsYXNzLT5wcmlvX2NoYW5nZWQocnEsIHAsIG9sZHByaW8sIHJ1bm5pbmcpOwogfQogCi0vKioKLSAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KLSAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgotICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAotICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCi0gKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCi0gKgotICogRnVuY3Rpb24gbGl2ZXMgaGVyZSBpbnN0ZWFkIG9mIGt0aHJlYWQuYyBiZWNhdXNlIGl0IG1lc3NlcyB3aXRoCi0gKiBzY2hlZHVsZXIgaW50ZXJuYWxzIHdoaWNoIHJlcXVpcmUgbG9ja2luZy4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLwotCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwotCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0Jc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwotCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBJcyB0aGlzIHRhc2sgbGlrZWx5IGNhY2hlLWhvdDoKQEAgLTIwNDQsNiArMjAxMSw5IEBACiB7CiAJczY0IGRlbHRhOwogCisJaWYgKHAtPnNjaGVkX2NsYXNzICE9ICZmYWlyX3NjaGVkX2NsYXNzKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwpAQCAtMjA1Miw5ICsyMDIyLDYgQEAKIAkJCSAmcC0+c2UgPT0gY2ZzX3JxX29mKCZwLT5zZSktPmxhc3QpKQogCQlyZXR1cm4gMTsKIAotCWlmIChwLT5zY2hlZF9jbGFzcyAhPSAmZmFpcl9zY2hlZF9jbGFzcykKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID09IC0xKQogCQlyZXR1cm4gMTsKIAlpZiAoc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID09IDApCkBAIC0yMDY1LDIyICsyMDMyLDIzIEBACiAJcmV0dXJuIGRlbHRhIDwgKHM2NClzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiB9CiAKLQogdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIHsKLQlpbnQgb2xkX2NwdSA9IHRhc2tfY3B1KHApOwotCXN0cnVjdCBjZnNfcnEgKm9sZF9jZnNycSA9IHRhc2tfY2ZzX3JxKHApLAotCQkgICAgICAqbmV3X2Nmc3JxID0gY3B1X2Nmc19ycShvbGRfY2ZzcnEsIG5ld19jcHUpOworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCS8qCisJICogV2Ugc2hvdWxkIG5ldmVyIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2VkIHRhc2ssCisJICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC4KKwkgKi8KKwlXQVJOX09OX09OQ0UocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HICYmCisJCQkhKHRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgJiBQUkVFTVBUX0FDVElWRSkpOworI2VuZGlmCiAKIAl0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7CiAKLQlpZiAob2xkX2NwdSAhPSBuZXdfY3B1KSB7CisJaWYgKHRhc2tfY3B1KHApICE9IG5ld19jcHUpIHsKIAkJcC0+c2UubnJfbWlncmF0aW9ucysrOwotCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMsCi0JCQkJICAgICAxLCAxLCBOVUxMLCAwKTsKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLCAxLCAxLCBOVUxMLCAwKTsKIAl9Ci0JcC0+c2UudnJ1bnRpbWUgLT0gb2xkX2Nmc3JxLT5taW5fdnJ1bnRpbWUgLQotCQkJCQkgbmV3X2Nmc3JxLT5taW5fdnJ1bnRpbWU7CiAKIAlfX3NldF90YXNrX2NwdShwLCBuZXdfY3B1KTsKIH0KQEAgLTIxMDUsMTMgKzIwNzMsMTAgQEAKIAogCS8qCiAJICogSWYgdGhlIHRhc2sgaXMgbm90IG9uIGEgcnVucXVldWUgKGFuZCBub3QgcnVubmluZyksIHRoZW4KLQkgKiBpdCBpcyBzdWZmaWNpZW50IHRvIHNpbXBseSB1cGRhdGUgdGhlIHRhc2sncyBjcHUgZmllbGQuCisJICogdGhlIG5leHQgd2FrZS11cCB3aWxsIHByb3Blcmx5IHBsYWNlIHRoZSB0YXNrLgogCSAqLwotCWlmICghcC0+c2Uub25fcnEgJiYgIXRhc2tfcnVubmluZyhycSwgcCkpIHsKLQkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJc2V0X3Rhc2tfY3B1KHAsIGRlc3RfY3B1KTsKKwlpZiAoIXAtPnNlLm9uX3JxICYmICF0YXNrX3J1bm5pbmcocnEsIHApKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CiAJcmVxLT50YXNrID0gcDsKQEAgLTIzMTcsMTAgKzIyODIsNzMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgZGVzdF9jcHU7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrID0gY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGNwdSkpOworCisJLyogTG9vayBmb3IgYWxsb3dlZCwgb25saW5lIENQVSBpbiBzYW1lIG5vZGUuICovCisJZm9yX2VhY2hfY3B1X2FuZChkZXN0X2NwdSwgbm9kZW1hc2ssIGNwdV9hY3RpdmVfbWFzaykKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpKQorCQkJcmV0dXJuIGRlc3RfY3B1OworCisJLyogQW55IGFsbG93ZWQsIG9ubGluZSBDUFU/ICovCisJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoJnAtPmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKKwlpZiAoZGVzdF9jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gZGVzdF9jcHU7CisKKwkvKiBObyBtb3JlIE1yLiBOaWNlIEd1eS4gKi8KKwlpZiAoZGVzdF9jcHUgPj0gbnJfY3B1X2lkcykgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHAsICZwLT5jcHVzX2FsbG93ZWQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1X2FjdGl2ZV9tYXNrLCAmcC0+Y3B1c19hbGxvd2VkKTsKKworCQkvKgorCQkgKiBEb24ndCB0ZWxsIHRoZW0gYWJvdXQgbW92aW5nIGV4aXRpbmcgdGFza3Mgb3IKKwkJICoga2VybmVsIHRocmVhZHMgKGJvdGggbW0gTlVMTCksIHNpbmNlIHRoZXkgbmV2ZXIKKwkJICogbGVhdmUga2VybmVsLgorCQkgKi8KKwkJaWYgKHAtPm1tICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJvY2VzcyAlZCAoJXMpIG5vICIKKwkJCSAgICAgICAibG9uZ2VyIGFmZmluZSB0byBjcHUlZFxuIiwKKwkJCSAgICAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgY3B1KTsKKwkJfQorCX0KKworCXJldHVybiBkZXN0X2NwdTsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tOgorICoKKyAqICAtIGZvcmssIEBwIGlzIHN0YWJsZSBiZWNhdXNlIGl0IGlzbid0IG9uIHRoZSB0YXNrbGlzdCB5ZXQKKyAqCisgKiAgLSBleGVjLCBAcCBpcyB1bnN0YWJsZSwgcmV0cnkgbG9vcAorICoKKyAqICAtIHdha2UtdXAsIHdlIHNlcmlhbGl6ZSAtPmNwdXNfYWxsb3dlZCBhZ2FpbnN0IFRBU0tfV0FLSU5HIHNvCisgKiAgICAgICAgICAgICB3ZSBzaG91bGQgYmUgZ29vZC4KKyAqLwogc3RhdGljIGlubGluZQogaW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKIHsKLQlyZXR1cm4gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKwlpbnQgY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKworCS8qCisJICogSW4gb3JkZXIgbm90IHRvIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2luZyB0YXNrIHdlIG5lZWQKKwkgKiB0byByZWx5IG9uIHR0d3UoKSB0byBwbGFjZSB0aGUgdGFzayBvbiBhIHZhbGlkIC0+Y3B1c19hbGxvd2VkCisJICogY3B1LgorCSAqCisJICogU2luY2UgdGhpcyBpcyBjb21tb24gdG8gYWxsIHBsYWNlbWVudCBzdHJhdGVnaWVzLCB0aGlzIGxpdmVzIGhlcmUuCisJICoKKwkgKiBbIHRoaXMgYWxsb3dzIC0+c2VsZWN0X3Rhc2soKSB0byBzaW1wbHkgcmV0dXJuIHRhc2tfY3B1KHApIGFuZAorCSAqICAgbm90IHdvcnJ5IGFib3V0IHRoaXMgZ2VuZXJpYyBjb25zdHJhaW50IF0KKwkgKi8KKwlpZiAodW5saWtlbHkoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSB8fAorCQkgICAgICFjcHVfb25saW5lKGNwdSkpKQorCQljcHUgPSBzZWxlY3RfZmFsbGJhY2tfcnEodGFza19jcHUocCksIHApOworCisJcmV0dXJuIGNwdTsKIH0KICNlbmRpZgogCkBAIC0yMzc1LDYgKzI0MDMsMTAgQEAKIAlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQogCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CiAJcC0+c3RhdGUgPSBUQVNLX1dBS0lORzsKKworCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtpbmcpCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhycSwgcCk7CisKIAlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7CkBAIC0yNDM4LDggKzI0NzAsOCBAQAogCiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQotCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKHJxLCBwKTsKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4pCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKIAogCWlmICh1bmxpa2VseShycS0+aWRsZV9zdGFtcCkpIHsKIAkJdTY0IGRlbHRhID0gcnEtPmNsb2NrIC0gcnEtPmlkbGVfc3RhbXA7CkBAIC0yNTM4LDE0ICsyNTcwLDYgQEAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAlJTklUX0hMSVNUX0hFQUQoJnAtPnByZWVtcHRfbm90aWZpZXJzKTsKICNlbmRpZgotCi0JLyoKLQkgKiBXZSBtYXJrIHRoZSBwcm9jZXNzIGFzIHJ1bm5pbmcgaGVyZSwgYnV0IGhhdmUgbm90IGFjdHVhbGx5Ci0JICogaW5zZXJ0ZWQgaXQgb250byB0aGUgcnVucXVldWUgeWV0LiBUaGlzIGd1YXJhbnRlZXMgdGhhdAotCSAqIG5vYm9keSB3aWxsIGFjdHVhbGx5IHJ1biBpdCwgYW5kIGEgc2lnbmFsIG9yIG90aGVyIGV4dGVybmFsCi0JICogZXZlbnQgY2Fubm90IHdha2UgaXQgdXAgYW5kIGluc2VydCBpdCBvbiB0aGUgcnVucXVldWUgZWl0aGVyLgotCSAqLwotCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogfQogCiAvKgpAQCAtMjU1Niw2ICsyNTgwLDEyIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCV9fc2NoZWRfZm9yayhwKTsKKwkvKgorCSAqIFdlIG1hcmsgdGhlIHByb2Nlc3MgYXMgd2FraW5nIGhlcmUuIFRoaXMgZ3VhcmFudGVlcyB0aGF0CisJICogbm9ib2R5IHdpbGwgYWN0dWFsbHkgcnVuIGl0LCBhbmQgYSBzaWduYWwgb3Igb3RoZXIgZXh0ZXJuYWwKKwkgKiBldmVudCBjYW5ub3Qgd2FrZSBpdCB1cCBhbmQgaW5zZXJ0IGl0IG9uIHRoZSBydW5xdWV1ZSBlaXRoZXIuCisJICovCisJcC0+c3RhdGUgPSBUQVNLX1dBS0lORzsKIAogCS8qCiAJICogUmV2ZXJ0IHRvIGRlZmF1bHQgcHJpb3JpdHkvcG9saWN5IG9uIGZvcmsgaWYgcmVxdWVzdGVkLgpAQCAtMjYyNCwxNCArMjY1NCwxNSBAQAogCXN0cnVjdCBycSAqcnE7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpOworCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CisJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAl0cmFjZV9zY2hlZF93YWtldXBfbmV3KHJxLCBwLCAxKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIFdGX0ZPUkspOwogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cCkKLQkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cChycSwgcCk7CisJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKQorCQlwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbihycSwgcCk7CiAjZW5kaWYKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KQEAgLTMxMDEsMjEgKzMxMzIsMzYgQEAKIH0KIAogLyoKLSAqIElmIGRlc3RfY3B1IGlzIGFsbG93ZWQgZm9yIHRoaXMgcHJvY2VzcywgbWlncmF0ZSB0aGUgdGFzayB0byBpdC4KLSAqIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGZvcmNpbmcgdGhlIGNwdV9hbGxvd2VkIG1hc2sgdG8gb25seQotICogYWxsb3cgZGVzdF9jcHUsIHdoaWNoIHdpbGwgZm9yY2UgdGhlIGNwdSBvbnRvIGRlc3RfY3B1LiBUaGVuCi0gKiB0aGUgY3B1X2FsbG93ZWQgbWFzayBpcyByZXN0b3JlZC4KKyAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAorICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KICAqLwotc3RhdGljIHZvaWQgc2NoZWRfbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGRlc3RfY3B1KQordm9pZCBzY2hlZF9leGVjKHZvaWQpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKIAlzdHJ1Y3QgbWlncmF0aW9uX3JlcSByZXE7CisJaW50IGRlc3RfY3B1LCB0aGlzX2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBycSAqcnE7CiAKK2FnYWluOgorCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCWRlc3RfY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9FWEVDLCAwKTsKKwlpZiAoZGVzdF9jcHUgPT0gdGhpc19jcHUpIHsKKwkJcHV0X2NwdSgpOworCQlyZXR1cm47CisJfQorCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwlwdXRfY3B1KCk7CisKKwkvKgorCSAqIHNlbGVjdF90YXNrX3JxKCkgY2FuIHJhY2UgYWdhaW5zdCAtPmNwdXNfYWxsb3dlZAorCSAqLwogCWlmICghY3B1bWFza190ZXN0X2NwdShkZXN0X2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkKLQkgICAgfHwgdW5saWtlbHkoIWNwdV9hY3RpdmUoZGVzdF9jcHUpKSkKLQkJZ290byBvdXQ7CisJICAgIHx8IHVubGlrZWx5KCFjcHVfYWN0aXZlKGRlc3RfY3B1KSkpIHsKKwkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CisJCWdvdG8gYWdhaW47CisJfQogCiAJLyogZm9yY2UgdGhlIHByb2Nlc3Mgb250byB0aGUgc3BlY2lmaWVkIENQVSAqLwogCWlmIChtaWdyYXRlX3Rhc2socCwgZGVzdF9jcHUsICZyZXEpKSB7CkBAIC0zMTMwLDI0ICszMTc2LDEwIEBACiAKIAkJcmV0dXJuOwogCX0KLW91dDoKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KIAogLyoKLSAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAotICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KLSAqLwotdm9pZCBzY2hlZF9leGVjKHZvaWQpCi17Ci0JaW50IG5ld19jcHUsIHRoaXNfY3B1ID0gZ2V0X2NwdSgpOwotCW5ld19jcHUgPSBzZWxlY3RfdGFza19ycShjdXJyZW50LCBTRF9CQUxBTkNFX0VYRUMsIDApOwotCXB1dF9jcHUoKTsKLQlpZiAobmV3X2NwdSAhPSB0aGlzX2NwdSkKLQkJc2NoZWRfbWlncmF0ZV90YXNrKGN1cnJlbnQsIG5ld19jcHUpOwotfQotCi0vKgogICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCiAgKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KICAqLwpAQCAtNTkxMSwxNCArNTk0MywxNSBAQAogICovCiBib29sIHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CiAKLQlzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAlpZiAoIXgtPmRvbmUpCiAJCXJldCA9IDA7CiAJZWxzZQogCQl4LT5kb25lLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKTsKQEAgLTU5MzMsMTIgKzU5NjYsMTMgQEAKICAqLwogYm9vbCBjb21wbGV0aW9uX2RvbmUoc3RydWN0IGNvbXBsZXRpb24gKngpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMTsKIAotCXNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCWlmICgheC0+ZG9uZSkKIAkJcmV0ID0gMDsKLQlzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY29tcGxldGlvbl9kb25lKTsKQEAgLTY0NTcsNyArNjQ5MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dmFsID0gLUVTUkNIOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJaWYgKHApIHsKIAkJcmV0dmFsID0gc2VjdXJpdHlfdGFza19nZXRzY2hlZHVsZXIocCk7CkBAIC02NDY1LDcgKzY0OTksNyBAQAogCQkJcmV0dmFsID0gcC0+cG9saWN5CiAJCQkJfCAocC0+c2NoZWRfcmVzZXRfb25fZm9yayA/IFNDSEVEX1JFU0VUX09OX0ZPUksgOiAwKTsKIAl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY0ODMsNyArNjUxNyw3IEBACiAJaWYgKCFwYXJhbSB8fCBwaWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJcmV0dmFsID0gLUVTUkNIOwogCWlmICghcCkKQEAgLTY0OTQsNyArNjUyOCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWxwLnNjaGVkX3ByaW9yaXR5ID0gcC0+cnRfcHJpb3JpdHk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBUaGlzIG9uZSBtaWdodCBzbGVlcCwgd2UgY2Fubm90IGRvIGl0IHdpdGggYSBzcGlubG9jayBoZWxkIC4uLgpAQCAtNjUwNCw3ICs2NTM4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02NTE1LDIyICs2NTQ5LDE4IEBACiAJaW50IHJldHZhbDsKIAogCWdldF9vbmxpbmVfY3B1cygpOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApIHsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCi0JLyoKLQkgKiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHNldF9jcHVzX2FsbG93ZWQgd2l0aCB0aGUKLQkgKiB0YXNrbGlzdF9sb2NrIGhlbGQuIFdlIHdpbGwgYnVtcCB0aGUgdGFza19zdHJ1Y3QncwotCSAqIHVzYWdlIGNvdW50IGFuZCB0aGVuIGRyb3AgdGFza2xpc3RfbG9jay4KLQkgKi8KKwkvKiBQcmV2ZW50IHAgZ29pbmcgYXdheSAqLwogCWdldF90YXNrX3N0cnVjdChwKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzX2FsbG93ZWQsIEdGUF9LRVJORUwpKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC02NjE2LDcgKzY2NDYsNyBAQAogCWludCByZXR2YWw7CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAogCXJldHZhbCA9IC1FU1JDSDsKIAlwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOwpAQCAtNjYzMiw3ICs2NjYyLDcgQEAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNjg3Niw3ICs2OTA2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR2YWwgPSAtRVNSQ0g7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTY4ODksMTMgKzY5MTksMTMgQEAKIAl0aW1lX3NsaWNlID0gcC0+c2NoZWRfY2xhc3MtPmdldF9ycl9pbnRlcnZhbChycSwgcCk7CiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJamlmZmllc190b190aW1lc3BlYyh0aW1lX3NsaWNlLCAmdCk7CiAJcmV0dmFsID0gY29weV90b191c2VyKGludGVydmFsLCAmdCwgc2l6ZW9mKHQpKSA/IC1FRkFVTFQgOiAwOwogCXJldHVybiByZXR2YWw7CiAKIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY5ODYsNiArNzAxNiw3IEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJX19zY2hlZF9mb3JrKGlkbGUpOworCWlkbGUtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCWlkbGUtPnNlLmV4ZWNfc3RhcnQgPSBzY2hlZF9jbG9jaygpOwogCiAJY3B1bWFza19jb3B5KCZpZGxlLT5jcHVzX2FsbG93ZWQsIGNwdW1hc2tfb2YoY3B1KSk7CkBAIC03MTAwLDcgKzcxMzEsMjMgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBTaW5jZSB3ZSByZWx5IG9uIHdha2UtdXBzIHRvIG1pZ3JhdGUgc2xlZXBpbmcgdGFza3MsIGRvbid0IGNoYW5nZQorCSAqIHRoZSAtPmNwdXNfYWxsb3dlZCBtYXNrIGZyb20gdW5kZXIgd2FraW5nIHRhc2tzLCB3aGljaCB3b3VsZCBiZQorCSAqIHBvc3NpYmxlIHdoZW4gd2UgY2hhbmdlIHJxLT5sb2NrIGluIHR0d3UoKSwgc28gc3luY2hyb25pemUgYWdhaW5zdAorCSAqIFRBU0tfV0FLSU5HIHRvIGF2b2lkIHRoYXQuCisJICovCithZ2FpbjoKKwl3aGlsZSAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpCisJCWNwdV9yZWxheCgpOworCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKworCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykgeworCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTcxNTYsNyArNzIwMyw3IEBACiBzdGF0aWMgaW50IF9fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNyY19jcHUsIGludCBkZXN0X2NwdSkKIHsKIAlzdHJ1Y3QgcnEgKnJxX2Rlc3QsICpycV9zcmM7Ci0JaW50IHJldCA9IDAsIG9uX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KCFjcHVfYWN0aXZlKGRlc3RfY3B1KSkpCiAJCXJldHVybiByZXQ7CkBAIC03MTcyLDEyICs3MjE5LDEzIEBACiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkKIAkJZ290byBmYWlsOwogCi0Jb25fcnEgPSBwLT5zZS5vbl9ycTsKLQlpZiAob25fcnEpCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qgb24gYSBycSwgdGhlIG5leHQgd2FrZS11cCB3aWxsIGVuc3VyZSB3ZSdyZQorCSAqIHBsYWNlZCBwcm9wZXJseS4KKwkgKi8KKwlpZiAocC0+c2Uub25fcnEpIHsKIAkJZGVhY3RpdmF0ZV90YXNrKHJxX3NyYywgcCwgMCk7Ci0KLQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwotCWlmIChvbl9ycSkgeworCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwogCQlhY3RpdmF0ZV90YXNrKHJxX2Rlc3QsIHAsIDApOwogCQljaGVja19wcmVlbXB0X2N1cnIocnFfZGVzdCwgcCwgMCk7CiAJfQpAQCAtNzI3MywzNyArNzMyMSwxMCBAQAogc3RhdGljIHZvaWQgbW92ZV90YXNrX29mZl9kZWFkX2NwdShpbnQgZGVhZF9jcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpbnQgZGVzdF9jcHU7Ci0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrID0gY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGRlYWRfY3B1KSk7CiAKIGFnYWluOgotCS8qIExvb2sgZm9yIGFsbG93ZWQsIG9ubGluZSBDUFUgaW4gc2FtZSBub2RlLiAqLwotCWZvcl9lYWNoX2NwdV9hbmQoZGVzdF9jcHUsIG5vZGVtYXNrLCBjcHVfYWN0aXZlX21hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkKLQkJCWdvdG8gbW92ZTsKKwlkZXN0X2NwdSA9IHNlbGVjdF9mYWxsYmFja19ycShkZWFkX2NwdSwgcCk7CiAKLQkvKiBBbnkgYWxsb3dlZCwgb25saW5lIENQVT8gKi8KLQlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZCgmcC0+Y3B1c19hbGxvd2VkLCBjcHVfYWN0aXZlX21hc2spOwotCWlmIChkZXN0X2NwdSA8IG5yX2NwdV9pZHMpCi0JCWdvdG8gbW92ZTsKLQotCS8qIE5vIG1vcmUgTXIuIE5pY2UgR3V5LiAqLwotCWlmIChkZXN0X2NwdSA+PSBucl9jcHVfaWRzKSB7Ci0JCWNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHAsICZwLT5jcHVzX2FsbG93ZWQpOwotCQlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZChjcHVfYWN0aXZlX21hc2ssICZwLT5jcHVzX2FsbG93ZWQpOwotCi0JCS8qCi0JCSAqIERvbid0IHRlbGwgdGhlbSBhYm91dCBtb3ZpbmcgZXhpdGluZyB0YXNrcyBvcgotCQkgKiBrZXJuZWwgdGhyZWFkcyAoYm90aCBtbSBOVUxMKSwgc2luY2UgdGhleSBuZXZlcgotCQkgKiBsZWF2ZSBrZXJuZWwuCi0JCSAqLwotCQlpZiAocC0+bW0gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gIgotCQkJICAgICAgICJsb25nZXIgYWZmaW5lIHRvIGNwdSVkXG4iLAotCQkJICAgICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tLCBkZWFkX2NwdSk7Ci0JCX0KLQl9Ci0KLW1vdmU6CiAJLyogSXQgY2FuIGhhdmUgYWZmaW5pdHkgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGNob29zaW5nLiAqLwogCWlmICh1bmxpa2VseSghX19taWdyYXRlX3Rhc2tfaXJxKHAsIGRlYWRfY3B1LCBkZXN0X2NwdSkpKQogCQlnb3RvIGFnYWluOwpAQCAtOTY2OCw3ICs5Njg5LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKIHN0YXRpYyBpbmxpbmUgaW50IHByZWVtcHRfY291bnRfZXF1YWxzKGludCBwcmVlbXB0X29mZnNldCkKIHsKLQlpbnQgbmVzdGVkID0gcHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFOworCWludCBuZXN0ZWQgPSAocHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFKSArIHJjdV9wcmVlbXB0X2RlcHRoKCk7CiAKIAlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7CiB9CkBAIC0xMDA4Myw3ICsxMDEwNCw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCWlmICh0c2stPnNjaGVkX2NsYXNzLT5tb3ZlZF9ncm91cCkKLQkJdHNrLT5zY2hlZF9jbGFzcy0+bW92ZWRfZ3JvdXAodHNrKTsKKwkJdHNrLT5zY2hlZF9jbGFzcy0+bW92ZWRfZ3JvdXAodHNrLCBvbl9ycSk7CiAjZW5kaWYKIAogCWlmICh1bmxpa2VseShydW5uaW5nKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggNDc5Y2U1Ni4uNWI0OTYxMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTIzNiw2ICsyMzYsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KTsKIAordW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBjbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KGNwdSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGNsb2NrOworfQorCiAjZWxzZSAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCkKQEAgLTI1MSwxNyArMjYzLDEyIEBACiAJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB1bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNsb2NrOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1KTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gY2xvY2s7CisJcmV0dXJuIHNjaGVkX2Nsb2NrX2NwdShjcHUpOwogfQorCisjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KKwogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDViZWRmNmUuLjQyYWMzYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNTEwLDYgKzUxMCw3IEBACiAJY3Vyci0+c3VtX2V4ZWNfcnVudGltZSArPSBkZWx0YV9leGVjOwogCXNjaGVkc3RhdF9hZGQoY2ZzX3JxLCBleGVjX2Nsb2NrLCBkZWx0YV9leGVjKTsKIAlkZWx0YV9leGVjX3dlaWdodGVkID0gY2FsY19kZWx0YV9mYWlyKGRlbHRhX2V4ZWMsIGN1cnIpOworCiAJY3Vyci0+dnJ1bnRpbWUgKz0gZGVsdGFfZXhlY193ZWlnaHRlZDsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CiB9CkBAIC03NjUsMTYgKzc2NiwyNiBAQAogCXNlLT52cnVudGltZSA9IHZydW50aW1lOwogfQogCisjZGVmaW5lIEVOUVVFVUVfV0FLRVVQCTEKKyNkZWZpbmUgRU5RVUVVRV9NSUdSQVRFIDIKKwogc3RhdGljIHZvaWQKLWVucXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCB3YWtldXApCitlbnF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpCiB7CiAJLyoKKwkgKiBVcGRhdGUgdGhlIG5vcm1hbGl6ZWQgdnJ1bnRpbWUgYmVmb3JlIHVwZGF0aW5nIG1pbl92cnVudGltZQorCSAqIHRocm91Z2ggY2FsbGlnIHVwZGF0ZV9jdXJyKCkuCisJICovCisJaWYgKCEoZmxhZ3MgJiBFTlFVRVVFX1dBS0VVUCkgfHwgKGZsYWdzICYgRU5RVUVVRV9NSUdSQVRFKSkKKwkJc2UtPnZydW50aW1lICs9IGNmc19ycS0+bWluX3ZydW50aW1lOworCisJLyoKIAkgKiBVcGRhdGUgcnVuLXRpbWUgc3RhdGlzdGljcyBvZiB0aGUgJ2N1cnJlbnQnLgogCSAqLwogCXVwZGF0ZV9jdXJyKGNmc19ycSk7CiAJYWNjb3VudF9lbnRpdHlfZW5xdWV1ZShjZnNfcnEsIHNlKTsKIAotCWlmICh3YWtldXApIHsKKwlpZiAoZmxhZ3MgJiBFTlFVRVVFX1dBS0VVUCkgewogCQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCBzZSwgMCk7CiAJCWVucXVldWVfc2xlZXBlcihjZnNfcnEsIHNlKTsKIAl9CkBAIC04MjgsNiArODM5LDE0IEBACiAJCV9fZGVxdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSk7CiAJYWNjb3VudF9lbnRpdHlfZGVxdWV1ZShjZnNfcnEsIHNlKTsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CisKKwkvKgorCSAqIE5vcm1hbGl6ZSB0aGUgZW50aXR5IGFmdGVyIHVwZGF0aW5nIHRoZSBtaW5fdnJ1bnRpbWUgYmVjYXVzZSB0aGUKKwkgKiB1cGRhdGUgY2FuIHJlZmVyIHRvIHRoZSAtPmN1cnIgaXRlbSBhbmQgd2UgbmVlZCB0byByZWZsZWN0IHRoaXMKKwkgKiBtb3ZlbWVudCBpbiBvdXIgbm9ybWFsaXplZCBwb3NpdGlvbi4KKwkgKi8KKwlpZiAoIXNsZWVwKQorCQlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CiB9CiAKIC8qCkBAIC0xMDM4LDEzICsxMDU3LDE5IEBACiB7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOworCWludCBmbGFncyA9IDA7CisKKwlpZiAod2FrZXVwKQorCQlmbGFncyB8PSBFTlFVRVVFX1dBS0VVUDsKKwlpZiAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpCisJCWZsYWdzIHw9IEVOUVVFVUVfTUlHUkFURTsKIAogCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgewogCQlpZiAoc2UtPm9uX3JxKQogCQkJYnJlYWs7CiAJCWNmc19ycSA9IGNmc19ycV9vZihzZSk7Ci0JCWVucXVldWVfZW50aXR5KGNmc19ycSwgc2UsIHdha2V1cCk7Ci0JCXdha2V1cCA9IDE7CisJCWVucXVldWVfZW50aXR5KGNmc19ycSwgc2UsIGZsYWdzKTsKKwkJZmxhZ3MgPSBFTlFVRVVFX1dBS0VVUDsKIAl9CiAKIAlocnRpY2tfdXBkYXRlKHJxKTsKQEAgLTExMjAsNiArMTE0NSwxNCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCitzdGF0aWMgdm9pZCB0YXNrX3dha2luZ19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZwLT5zZTsKKwlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBjZnNfcnFfb2Yoc2UpOworCisJc2UtPnZydW50aW1lIC09IGNmc19ycS0+bWluX3ZydW50aW1lOworfQorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIC8qCiAgKiBlZmZlY3RpdmVfbG9hZCgpIGNhbGN1bGF0ZXMgdGhlIGxvYWQgY2hhbmdlIGFzIHNlZW4gZnJvbSB0aGUgcm9vdF90YXNrX2dyb3VwCkBAIC0xNDI5LDYgKzE0NjIsOSBAQAogCX0KIAogCWZvcl9lYWNoX2RvbWFpbihjcHUsIHRtcCkgeworCQlpZiAoISh0bXAtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIElmIHBvd2VyIHNhdmluZ3MgbG9naWMgaXMgZW5hYmxlZCBmb3IgYSBkb21haW4sIHNlZSBpZiB3ZQogCQkgKiBhcmUgbm90IG92ZXJsb2FkZWQsIGlmIHNvLCBkb24ndCBiYWxhbmNlIHdpZGVyLgpAQCAtMTk3NSw2ICsyMDExLDggQEAKIAkJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKIAl9CiAKKwlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CisKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjAyOCwxMiArMjA2NiwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLXN0YXRpYyB2b2lkIG1vdmVkX2dyb3VwX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgbW92ZWRfZ3JvdXBfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBvbl9ycSkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSB0YXNrX2Nmc19ycShwKTsKIAogCXVwZGF0ZV9jdXJyKGNmc19ycSk7Ci0JcGxhY2VfZW50aXR5KGNmc19ycSwgJnAtPnNlLCAxKTsKKwlpZiAoIW9uX3JxKQorCQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCAmcC0+c2UsIDEpOwogfQogI2VuZGlmCiAKQEAgLTIwNzMsNiArMjExMiw4IEBACiAJLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19mYWlyLAogCS5ycV9vbmxpbmUJCT0gcnFfb25saW5lX2ZhaXIsCiAJLnJxX29mZmxpbmUJCT0gcnFfb2ZmbGluZV9mYWlyLAorCisJLnRhc2tfd2FraW5nCQk9IHRhc2tfd2FraW5nX2ZhaXIsCiAjZW5kaWYKIAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19mYWlyLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBkMmVhMjgyLi5mNDgzMjhhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKICAqIElmIHdlIGFyZSBub3QgcnVubmluZyBhbmQgd2UgYXJlIG5vdCBnb2luZyB0byByZXNjaGVkdWxlIHNvb24sIHdlIHNob3VsZAogICogdHJ5IHRvIHB1c2ggdGFza3MgYXdheSBub3cKICAqLwotc3RhdGljIHZvaWQgdGFza193YWtlX3VwX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3N0YXRpYyB2b2lkIHRhc2tfd29rZW5fcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWlmICghdGFza19ydW5uaW5nKHJxLCBwKSAmJgogCSAgICAhdGVzdF90c2tfbmVlZF9yZXNjaGVkKHJxLT5jdXJyKSAmJgpAQCAtMTc1Myw3ICsxNzUzLDcgQEAKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCiAJLnByZV9zY2hlZHVsZQkJPSBwcmVfc2NoZWR1bGVfcnQsCiAJLnBvc3Rfc2NoZWR1bGUJCT0gcG9zdF9zY2hlZHVsZV9ydCwKLQkudGFza193YWtlX3VwCQk9IHRhc2tfd2FrZV91cF9ydCwKKwkudGFza193b2tlbgkJPSB0YXNrX3dva2VuX3J0LAogCS5zd2l0Y2hlZF9mcm9tCQk9IHN3aXRjaGVkX2Zyb21fcnQsCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDE4MTRlNjguLmQwOTY5MmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIxOCwxMyArMjE4LDEzIEBACiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwogCiAJLyoKLQkgKiBXZSB3b24ndCBnZXQgcHJvYmxlbXMgd2l0aCB0aGUgdGFyZ2V0J3MgVUlEIGNoYW5naW5nIHVuZGVyIHVzCi0JICogYmVjYXVzZSBjaGFuZ2luZyBpdCByZXF1aXJlcyBSQ1UgYmUgdXNlZCwgYW5kIGlmIHQgIT0gY3VycmVudCwgdGhlCi0JICogY2FsbGVyIG11c3QgYmUgaG9sZGluZyB0aGUgUkNVIHJlYWRsb2NrIChieSB3YXkgb2YgYSBzcGlubG9jaykgYW5kCi0JICogd2UgdXNlIFJDVSBwcm90ZWN0aW9uIGhlcmUKKwkgKiBQcm90ZWN0IGFjY2VzcyB0byBAdCBjcmVkZW50aWFscy4gVGhpcyBjYW4gZ28gYXdheSB3aGVuIGFsbAorCSAqIGNhbGxlcnMgaG9sZCByY3UgcmVhZCBsb2NrLgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAl1c2VyID0gZ2V0X3VpZChfX3Rhc2tfY3JlZCh0KS0+dXNlcik7CiAJYXRvbWljX2luYygmdXNlci0+c2lncGVuZGluZyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAob3ZlcnJpZGVfcmxpbWl0IHx8CiAJICAgIGF0b21pY19yZWFkKCZ1c2VyLT5zaWdwZW5kaW5nKSA8PQpAQCAtMTE3OSwxMSArMTE3OSwxMiBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqcGNyZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdmFsaWRfc2lnbmFsKHNpZykpCiAJCXJldHVybiByZXQ7CiAKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlwID0gcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7CiAJaWYgKCFwKSB7CiAJCXJldCA9IC1FU1JDSDsKQEAgLTExOTksMTQgKzEyMDAsMTYgQEAKIAlyZXQgPSBzZWN1cml0eV90YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWlmIChzaWcgJiYgcC0+c2lnaGFuZCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKworCWlmIChzaWcpIHsKKwkJaWYgKGxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpIHsKKwkJCXJldCA9IF9fc2VuZF9zaWduYWwoc2lnLCBpbmZvLCBwLCAxLCAwKTsKKwkJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRVNSQ0g7CiAJfQogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtpbGxfcGlkX2luZm9fYXNfdWlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyMGNjZmI1Li4yNmE2YjczIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlpZiAobmljZXZhbCA+IDE5KQogCQluaWNldmFsID0gMTk7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlzd2l0Y2ggKHdoaWNoKSB7CiAJCWNhc2UgUFJJT19QUk9DRVNTOgpAQCAtMTk5LDYgKzIwMCw3IEBACiAJfQogb3V0X3VubG9jazoKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUuYyBiL2tlcm5lbC90aW1lLmMKaW5kZXggYzYzMjRkOS4uODA0Nzk4MCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAJd2FsbF90b19tb25vdG9uaWMudHZfc2VjIC09IHN5c190ei50el9taW51dGVzd2VzdCAqIDYwOwogCXh0aW1lLnR2X3NlYyArPSBzeXNfdHoudHpfbWludXRlc3dlc3QgKiA2MDsKKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CiAJY2xvY2tfd2FzX3NldCgpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKaW5kZXggM2Q1ZmMwZi4uNmY3NDBkOSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCkBAIC0yMzgsOCArMjM4LDkgQEAKICAqLwogdm9pZCBjbG9ja2V2ZW50c19ub3RpZnkodW5zaWduZWQgbG9uZyByZWFzb24sIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqdG1wOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjcHU7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZXZlbnRzX2xvY2ssIGZsYWdzKTsKIAljbG9ja2V2ZW50c19kb19ub3RpZnkocmVhc29uLCBhcmcpOwpAQCAtMjUwLDggKzI1MSwxOSBAQAogCQkgKiBVbnJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBkZXZpY2VzIHdoaWNoIHdlcmUKIAkJICogcmVsZWFzZWQgZnJvbSB0aGUgdXNlcnMgaW4gdGhlIG5vdGlmeSBjaGFpbi4KIAkJICovCi0JCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCB0bXAsICZjbG9ja2V2ZW50c19yZWxlYXNlZCkKLQkJCWxpc3RfZGVsKG5vZGUpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZjbG9ja2V2ZW50c19yZWxlYXNlZCwgbGlzdCkKKwkJCWxpc3RfZGVsKCZkZXYtPmxpc3QpOworCQkvKgorCQkgKiBOb3cgY2hlY2sgd2hldGhlciB0aGUgQ1BVIGhhcyBsZWZ0IHVudXNlZCBwZXIgY3B1IGRldmljZXMKKwkJICovCisJCWNwdSA9ICooKGludCAqKWFyZyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgJmNsb2NrZXZlbnRfZGV2aWNlcywgbGlzdCkgeworCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXYtPmNwdW1hc2spICYmCisJCQkgICAgY3B1bWFza193ZWlnaHQoZGV2LT5jcHVtYXNrKSA9PSAxKSB7CisJCQkJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOworCQkJCWxpc3RfZGVsKCZkZXYtPmxpc3QpOworCQkJfQorCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggYWY0MTM1Zi4uN2ZhYWEzMiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0xNjUsNiArMTY1LDEzIEBACiAvKiBmbGFnIGZvciBpZiB0aW1la2VlcGluZyBpcyBzdXNwZW5kZWQgKi8KIGludCBfX3JlYWRfbW9zdGx5IHRpbWVrZWVwaW5nX3N1c3BlbmRlZDsKIAorc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB4dGltZV9jYWNoZSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7Cit2b2lkIHVwZGF0ZV94dGltZV9jYWNoZSh1NjQgbnNlYykKK3sKKwl4dGltZV9jYWNoZSA9IHh0aW1lOworCXRpbWVzcGVjX2FkZF9ucygmeHRpbWVfY2FjaGUsIG5zZWMpOworfQorCiAvKiBtdXN0IGhvbGQgeHRpbWVfbG9jayAqLwogdm9pZCB0aW1la2VlcGluZ19sZWFwX2luc2VydChpbnQgbGVhcHNlY29uZCkKIHsKQEAgLTMyNSw2ICszMzIsOCBAQAogCiAJeHRpbWUgPSAqdHY7CiAKKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CisKIAl0aW1la2VlcGVyLm50cF9lcnJvciA9IDA7CiAJbnRwX2NsZWFyKCk7CiAKQEAgLTU1MCw2ICs1NTksNyBAQAogCX0KIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCQkJLWJvb3QudHZfc2VjLCAtYm9vdC50dl9uc2VjKTsKKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJdG90YWxfc2xlZXBfdGltZS50dl9zZWMgPSAwOwogCXRvdGFsX3NsZWVwX3RpbWUudHZfbnNlYyA9IDA7CiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKQEAgLTU4Myw2ICs1OTMsNyBAQAogCQl3YWxsX3RvX21vbm90b25pYyA9IHRpbWVzcGVjX3N1Yih3YWxsX3RvX21vbm90b25pYywgdHMpOwogCQl0b3RhbF9zbGVlcF90aW1lID0gdGltZXNwZWNfYWRkX3NhZmUodG90YWxfc2xlZXBfdGltZSwgdHMpOwogCX0KKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLwogCXRpbWVrZWVwZXIuY2xvY2stPmN5Y2xlX2xhc3QgPSB0aW1la2VlcGVyLmNsb2NrLT5yZWFkKHRpbWVrZWVwZXIuY2xvY2spOwogCXRpbWVrZWVwZXIubnRwX2Vycm9yID0gMDsKQEAgLTcyMiw2ICs3MzMsNyBAQAogCQkJCXRpbWVrZWVwZXIubnRwX2Vycm9yX3NoaWZ0OwogfQogCisKIC8qKgogICogbG9nYXJpdGhtaWNfYWNjdW11bGF0aW9uIC0gc2hpZnRlZCBhY2N1bXVsYXRpb24gb2YgY3ljbGVzCiAgKgpAQCAtNzY1LDYgKzc3Nyw3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAorCiAvKioKICAqIHVwZGF0ZV93YWxsX3RpbWUgLSBVc2VzIHRoZSBjdXJyZW50IGNsb2Nrc291cmNlIHRvIGluY3JlbWVudCB0aGUgd2FsbCB0aW1lCiAgKgpAQCAtNzc0LDYgKzc4Nyw3IEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpjbG9jazsKIAljeWNsZV90IG9mZnNldDsKKwl1NjQgbnNlY3M7CiAJaW50IHNoaWZ0ID0gMCwgbWF4c2hpZnQ7CiAKIAkvKiBNYWtlIHN1cmUgd2UncmUgZnVsbHkgcmVzdW1lZDogKi8KQEAgLTgzOSw2ICs4NTMsOSBAQAogCXRpbWVrZWVwZXIubnRwX2Vycm9yICs9CXRpbWVrZWVwZXIueHRpbWVfbnNlYyA8PAogCQkJCXRpbWVrZWVwZXIubnRwX2Vycm9yX3NoaWZ0OwogCisJbnNlY3MgPSBjbG9ja3NvdXJjZV9jeWMybnMob2Zmc2V0LCB0aW1la2VlcGVyLm11bHQsIHRpbWVrZWVwZXIuc2hpZnQpOworCXVwZGF0ZV94dGltZV9jYWNoZShuc2Vjcyk7CisKIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBuZXcgY2xvY2tzb3VyY2UgdG8gdXNlICovCiAJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgdGltZWtlZXBlci5jbG9jaywgdGltZWtlZXBlci5tdWx0KTsKIH0KQEAgLTg3NSwxMyArODkyLDEzIEBACiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCkKIHsKLQlyZXR1cm4geHRpbWUudHZfc2VjOworCXJldHVybiB4dGltZV9jYWNoZS50dl9zZWM7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF9zZWNvbmRzKTsKIAogc3RydWN0IHRpbWVzcGVjIF9fY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKQogewotCXJldHVybiB4dGltZTsKKwlyZXR1cm4geHRpbWVfY2FjaGU7CiB9CiAKIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2tlcm5lbF90aW1lKHZvaWQpCkBAIC04OTEsNyArOTA4LDggQEAKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Ci0JCW5vdyA9IHh0aW1lOworCisJCW5vdyA9IHh0aW1lX2NhY2hlOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCiAJcmV0dXJuIG5vdzsKQEAgLTkwNSw3ICs5MjMsOCBAQAogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJbm93ID0geHRpbWU7CisKKwkJbm93ID0geHRpbWVfY2FjaGU7CiAJCW1vbm8gPSB3YWxsX3RvX21vbm90b25pYzsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA1ZGI1YThkLi4xNTUzM2I3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNjU2LDggKzY1Niw2IEBACiAKIAlkZWJ1Z19hY3RpdmF0ZSh0aW1lciwgZXhwaXJlcyk7CiAKLQluZXdfYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7Ci0KIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCmluZGV4IDdlY2FiMDYuLjM3NWY4MWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTI4Miw2ICsyODIsMTggQEAKIHN0YXRpYyBpbnQga3JldHByb2JlX2Rpc3BhdGNoZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCisvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLworc3RhdGljIGludCBjaGVja19ldmVudF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFpc2FscGhhKCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCXJldHVybiAwOworCXdoaWxlICgqKytuYW1lICE9ICdcMCcpIHsKKwkJaWYgKCFpc2FscGhhKCpuYW1lKSAmJiAhaXNkaWdpdCgqbmFtZSkgJiYgKm5hbWUgIT0gJ18nKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCiAvKgogICogQWxsb2NhdGUgbmV3IHRyYWNlX3Byb2JlIGFuZCBpbml0aWFsaXplIGl0IChpbmNsdWRpbmcga3Byb2JlcykuCiAgKi8KQEAgLTI5MywxMCArMzA1LDExIEBACiAJCQkJCSAgICAgaW50IG5hcmdzLCBpbnQgaXNfcmV0dXJuKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisJaW50IHJldCA9IC1FTk9NRU07CiAKIAl0cCA9IGt6YWxsb2MoU0laRU9GX1RSQUNFX1BST0JFKG5hcmdzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKIAlpZiAoc3ltYm9sKSB7CiAJCXRwLT5zeW1ib2wgPSBrc3RyZHVwKHN5bWJvbCwgR0ZQX0tFUk5FTCk7CkBAIC0zMTIsMTQgKzMyNSwyMCBAQAogCWVsc2UKIAkJdHAtPnJwLmtwLnByZV9oYW5kbGVyID0ga3Byb2JlX2Rpc3BhdGNoZXI7CiAKLQlpZiAoIWV2ZW50KQorCWlmICghZXZlbnQgfHwgIWNoZWNrX2V2ZW50X25hbWUoZXZlbnQpKSB7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CisJfQorCiAJdHAtPmNhbGwubmFtZSA9IGtzdHJkdXAoZXZlbnQsIEdGUF9LRVJORUwpOwogCWlmICghdHAtPmNhbGwubmFtZSkKIAkJZ290byBlcnJvcjsKIAotCWlmICghZ3JvdXApCisJaWYgKCFncm91cCB8fCAhY2hlY2tfZXZlbnRfbmFtZShncm91cCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcjsKKwl9CisKIAl0cC0+Y2FsbC5zeXN0ZW0gPSBrc3RyZHVwKGdyb3VwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwLT5jYWxsLnN5c3RlbSkKIAkJZ290byBlcnJvcjsKQEAgLTMzMCw3ICszNDksNyBAQAogCWtmcmVlKHRwLT5jYWxsLm5hbWUpOwogCWtmcmVlKHRwLT5zeW1ib2wpOwogCWtmcmVlKHRwKTsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3Byb2JlX2FyZyhzdHJ1Y3QgcHJvYmVfYXJnICphcmcpCkBAIC02OTUsMTAgKzcxNCwxMCBAQAogCWlmICghZXZlbnQpIHsKIAkJLyogTWFrZSBhIG5ldyBldmVudCBuYW1lICovCiAJCWlmIChzeW1ib2wpCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQCVzJStsZCIsCisJCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjXyVzXyVsZCIsCiAJCQkJIGlzX3JldHVybiA/ICdyJyA6ICdwJywgc3ltYm9sLCBvZmZzZXQpOwogCQllbHNlCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQDB4JXAiLAorCQkJc25wcmludGYoYnVmLCBNQVhfRVZFTlRfTkFNRV9MRU4sICIlY18weCVwIiwKIAkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBhZGRyKTsKIAkJZXZlbnQgPSBidWY7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggZjY2OTM5Ni4uYTc5NzRhNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC05Myw2ICs5Myw3IEBACiAJLndhcm5pbmdfc3ltYm9sCQk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKIAkuc3RhY2sJCQk9IGJhY2t0cmFjZV9zdGFjaywKIAkuYWRkcmVzcwkJPSBiYWNrdHJhY2VfYWRkcmVzcywKKwkud2Fsa19zdGFjawkJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCmluZGV4IDc2MDc0MjAuLmE0ZTk3MWRlIDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzc19idW56aXAyLmMKKysrIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCkBAIC02MzcsNiArNjM3LDggQEAKIAogCS8qIEFsbG9jYXRlIGJ1bnppcF9kYXRhLiAgTW9zdCBmaWVsZHMgaW5pdGlhbGl6ZSB0byB6ZXJvLiAqLwogCWJkID0gKmJkcCA9IG1hbGxvYyhpKTsKKwlpZiAoIWJkKQorCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJbWVtc2V0KGJkLCAwLCBzaXplb2Yoc3RydWN0IGJ1bnppcF9kYXRhKSk7CiAJLyogU2V0dXAgaW5wdXQgYnVmZmVyICovCiAJYmQtPmluYnVmID0gaW5idWY7CkBAIC02NjQsNiArNjY2LDggQEAKIAliZC0+ZGJ1ZlNpemUgPSAxMDAwMDAqKGktQlpoMCk7CiAKIAliZC0+ZGJ1ZiA9IGxhcmdlX21hbGxvYyhiZC0+ZGJ1ZlNpemUgKiBzaXplb2YoaW50KSk7CisJaWYgKCFiZC0+ZGJ1ZikKKwkJcmV0dXJuIFJFVFZBTF9PVVRfT0ZfTUVNT1JZOwogCXJldHVybiBSRVRWQUxfT0s7CiB9CiAKQEAgLTY4Niw3ICs2OTAsNyBAQAogCiAJaWYgKCFvdXRidWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZXIiKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJfQogCWlmIChidWYpCiAJCWluYnVmID0gYnVmOwpAQCAtNjk0LDYgKzY5OCw3IEBACiAJCWluYnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOwogCWlmICghaW5idWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnB1dCBidWZlciIpOworCQlpID0gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdF8wOwogCX0KIAlpID0gc3RhcnRfYnVuemlwKCZiZCwgaW5idWYsIGxlbiwgZmlsbCk7CkBAIC03MjAsMTEgKzcyNSwxNCBAQAogCX0gZWxzZSBpZiAoaSA9PSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GKSB7CiAJCWVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kcyB1bmV4cGVjdGVkbHkiKTsKIAl9CisJaWYgKCFiZCkKKwkJZ290byBleGl0XzE7CiAJaWYgKGJkLT5kYnVmKQogCQlsYXJnZV9mcmVlKGJkLT5kYnVmKTsKIAlpZiAocG9zKQogCQkqcG9zID0gYmQtPmluYnVmUG9zOwogCWZyZWUoYmQpOworZXhpdF8xOgogCWlmICghYnVmKQogCQlmcmVlKGluYnVmKTsKIGV4aXRfMDoKZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCBhZmNlOTZhLi45Zjc1YjRlIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0zMzgsMTAgKzMzOCwxMCBAQAogI2VuZGlmCiAKIC8qKgotICogc2tpcF9zcGFjZXMgLSBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIEBzLgotICogQHM6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCisgKiBza2lwX3NwYWNlcyAtIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gQHN0ci4KKyAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCiAgKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBAcy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gQHN0ci4KICAqLwogY2hhciAqc2tpcF9zcGFjZXMoY29uc3QgY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDc0YWY0NDkuLmQ3OWI5MjUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMzU3OSw3ICszNTgwLDcgQEAKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGhvbGVzIGluIGEgcmFuZ2Ugb24gYSBub2RlLiBJZiBuaWQgaXMgTUFYX05VTU5PREVTLAogICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShpbnQgbmlkLAordW5zaWduZWQgbG9uZyBfX21lbWluaXQgX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaW50IG5pZCwKIAkJCQl1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIHJhbmdlX2VuZF9wZm4pCiB7CkBAIC00MTA4LDcgKzQxMDksNyBAQAogfQogCiAvKiBzb3J0IHRoZSBub2RlX21hcCBieSBzdGFydF9wZm4gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzb3J0X25vZGVfbWFwKHZvaWQpCit2b2lkIF9faW5pdCBzb3J0X25vZGVfbWFwKHZvaWQpCiB7CiAJc29ydChlYXJseV9ub2RlX21hcCwgKHNpemVfdClucl9ub2RlbWFwX2VudHJpZXMsCiAJCQlzaXplb2Yoc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiksCkBAIC01MDA4LDIzICs1MDA5LDY1IEBACiBpbnQgc2V0X21pZ3JhdGV0eXBlX2lzb2xhdGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqY3Vycl9wYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBmbiwgaXRlcjsKKwl1bnNpZ25lZCBsb25nIGltbW9iaWxlID0gMDsKKwlzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5IGFyZzsKKwlpbnQgbm90aWZpZXJfcmV0OwogCWludCByZXQgPSAtRUJVU1k7CiAJaW50IHpvbmVfaWR4OwogCiAJem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAl6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEluIGZ1dHVyZSwgbW9yZSBtaWdyYXRlIHR5cGVzIHdpbGwgYmUgYWJsZSB0byBiZSBpc29sYXRpb24gdGFyZ2V0LgotCSAqLwotCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfTU9WQUJMRSAmJgotCSAgICB6b25lX2lkeCAhPSBaT05FX01PVkFCTEUpCisJaWYgKGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSkgPT0gTUlHUkFURV9NT1ZBQkxFIHx8CisJICAgIHpvbmVfaWR4ID09IFpPTkVfTU9WQUJMRSkgeworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKLQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7Ci0JbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKLQlyZXQgPSAwOworCX0KKworCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCWFyZy5zdGFydF9wZm4gPSBwZm47CisJYXJnLm5yX3BhZ2VzID0gcGFnZWJsb2NrX25yX3BhZ2VzOworCWFyZy5wYWdlc19mb3VuZCA9IDA7CisKKwkvKgorCSAqIEl0IG1heSBiZSBwb3NzaWJsZSB0byBpc29sYXRlIGEgcGFnZWJsb2NrIGV2ZW4gaWYgdGhlCisJICogbWlncmF0ZXR5cGUgaXMgbm90IE1JR1JBVEVfTU9WQUJMRS4gVGhlIG1lbW9yeSBpc29sYXRpb24KKwkgKiBub3RpZmllciBjaGFpbiBpcyB1c2VkIGJ5IGJhbGxvb24gZHJpdmVycyB0byByZXR1cm4gdGhlCisJICogbnVtYmVyIG9mIHBhZ2VzIGluIGEgcmFuZ2UgdGhhdCBhcmUgaGVsZCBieSB0aGUgYmFsbG9vbgorCSAqIGRyaXZlciB0byBzaHJpbmsgbWVtb3J5LiBJZiBhbGwgdGhlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgZm9yCisJICogYnkgYmFsbG9vbnMsIGFyZSBmcmVlLCBvciBvbiB0aGUgTFJVLCBpc29sYXRpb24gY2FuIGNvbnRpbnVlLgorCSAqIExhdGVyLCBmb3IgZXhhbXBsZSwgd2hlbiBtZW1vcnkgaG90cGx1ZyBub3RpZmllciBydW5zLCB0aGVzZQorCSAqIHBhZ2VzIHJlcG9ydGVkIGFzICJjYW4gYmUgaXNvbGF0ZWQiIHNob3VsZCBiZSBpc29sYXRlZChmcmVlZCkKKwkgKiBieSB0aGUgYmFsbG9vbiBkcml2ZXIgdGhyb3VnaCB0aGUgbWVtb3J5IG5vdGlmaWVyIGNoYWluLgorCSAqLworCW5vdGlmaWVyX3JldCA9IG1lbW9yeV9pc29sYXRlX25vdGlmeShNRU1fSVNPTEFURV9DT1VOVCwgJmFyZyk7CisJbm90aWZpZXJfcmV0ID0gbm90aWZpZXJfdG9fZXJybm8obm90aWZpZXJfcmV0KTsKKwlpZiAobm90aWZpZXJfcmV0IHx8ICFhcmcucGFnZXNfZm91bmQpCisJCWdvdG8gb3V0OworCisJZm9yIChpdGVyID0gcGZuOyBpdGVyIDwgKHBmbiArIHBhZ2VibG9ja19ucl9wYWdlcyk7IGl0ZXIrKykgeworCQlpZiAoIXBmbl92YWxpZF93aXRoaW4ocGZuKSkKKwkJCWNvbnRpbnVlOworCisJCWN1cnJfcGFnZSA9IHBmbl90b19wYWdlKGl0ZXIpOworCQlpZiAoIXBhZ2VfY291bnQoY3Vycl9wYWdlKSB8fCBQYWdlTFJVKGN1cnJfcGFnZSkpCisJCQljb250aW51ZTsKKworCQlpbW1vYmlsZSsrOworCX0KKworCWlmIChhcmcucGFnZXNfZm91bmQgPT0gaW1tb2JpbGUpCisJCXJldCA9IDA7CisKIG91dDoKKwlpZiAoIXJldCkgeworCQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJCW1vdmVfZnJlZXBhZ2VzX2Jsb2NrKHpvbmUsIHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCWlmICghcmV0KQogCQlkcmFpbl9hbGxfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IDU2OTc1MDAuLjE4ZTdmNWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAKIAloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKElTX0VSUihoaWQpKQotCQlyZXR1cm4gUFRSX0VSUihzZXNzaW9uLT5oaWQpOworCQlyZXR1cm4gUFRSX0VSUihoaWQpOwogCiAJc2Vzc2lvbi0+aGlkID0gaGlkOwogCXNlc3Npb24tPnJlcSA9IHJlcTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA1MTI5Yjg4Li4xMTIwY2YxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC0xMjEyLDYgKzEyMTIsNyBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJaWYgKGwyY2FwX3BpKHNrKS0+cmV0cnlfY291bnQgPj0gbDJjYXBfcGkoc2spLT5yZW1vdGVfbWF4X3R4KSB7CiAJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEobDJjYXBfcGkoc2spLT5jb25uLCBzayk7CisJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQzNSw4ICszNDM2LDggQEAKIAkJCSAgICAocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCiAJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOwogCi0JCQlsMmNhcF9lcnRtX3NlbmQoc2spOwogCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCQlsMmNhcF9lcnRtX3NlbmQoc2spOwogCQl9CiAJCWJyZWFrOwogCkBAIC0zNDcxLDkgKzM0NzIsOSBAQAogCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKIAogCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgewotCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKIAkJCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOwogCQkJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKIAkJCWwyY2FwX2VydG1fc2VuZChzayk7CiAJCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgewogCQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID0gdHhfc2VxOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvYmUuYyBiL25ldC9kY2NwL3Byb2JlLmMKaW5kZXggZGMzMjg0Mi4uYTEzNjJkYyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvYmUuYworKysgYi9uZXQvZGNjcC9wcm9iZS5jCkBAIC00Myw3ICs0Myw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBwcm9jbmFtZVtdID0gImRjY3Bwcm9iZSI7CiAKIHN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCBrZmlmbwkgICpmaWZvOworCXN0cnVjdCBrZmlmbwkgIGZpZm87CiAJc3BpbmxvY2tfdAkgIGxvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgdGltZXNwZWMJICB0c3RhcnQ7CkBAIC02Nyw3ICs2Nyw3IEBACiAJbGVuICs9IHZzY25wcmludGYodGJ1ZitsZW4sIHNpemVvZih0YnVmKS1sZW4sIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0Ja2ZpZm9fcHV0KGRjY3B3LmZpZm8sIHRidWYsIGxlbik7CisJa2ZpZm9faW5fbG9ja2VkKCZkY2Nwdy5maWZvLCB0YnVmLCBsZW4sICZkY2Nwdy5sb2NrKTsKIAl3YWtlX3VwKCZkY2Nwdy53YWl0KTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBACiAKIHN0YXRpYyBpbnQgZGNjcHByb2JlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Ja2ZpZm9fcmVzZXQoZGNjcHcuZmlmbyk7CisJa2ZpZm9fcmVzZXQoJmRjY3B3LmZpZm8pOwogCWdldG5zdGltZW9mZGF5KCZkY2Nwdy50c3RhcnQpOwogCXJldHVybiAwOwogfQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkY2Nwdy53YWl0LAotCQkJCQkgX19rZmlmb19sZW4oZGNjcHcuZmlmbykgIT0gMCk7CisJCQkJCSBrZmlmb19sZW4oJmRjY3B3LmZpZm8pICE9IDApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZTsKIAotCWNudCA9IGtmaWZvX2dldChkY2Nwdy5maWZvLCB0YnVmLCBsZW4pOworCWNudCA9IGtmaWZvX291dF9sb2NrZWQoJmRjY3B3LmZpZm8sIHRidWYsIGxlbiwgJmRjY3B3LmxvY2spOwogCWVycm9yID0gY29weV90b191c2VyKGJ1ZiwgdGJ1ZiwgY250KSA/IC1FRkFVTFQgOiAwOwogCiBvdXRfZnJlZToKQEAgLTE1NiwxMCArMTU2LDggQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRjY3B3LndhaXQpOwogCXNwaW5fbG9ja19pbml0KCZkY2Nwdy5sb2NrKTsKLQlkY2Nwdy5maWZvID0ga2ZpZm9fYWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCwgJmRjY3B3LmxvY2spOwotCWlmIChJU19FUlIoZGNjcHcuZmlmbykpCi0JCXJldHVybiBQVFJfRVJSKGRjY3B3LmZpZm8pOwotCisJaWYgKGtmaWZvX2FsbG9jKCZkY2Nwdy5maWZvLCBidWZzaXplLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIHJldDsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgcHJvY25hbWUsIFNfSVJVU1IsICZkY2NwcHJvYmVfZm9wcykpCiAJCWdvdG8gZXJyMDsKIApAQCAtMTcyLDE0ICsxNzAsMTQgQEAKIGVycjE6CiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgcHJvY25hbWUpOwogZXJyMDoKLQlrZmlmb19mcmVlKGRjY3B3LmZpZm8pOworCWtmaWZvX2ZyZWUoJmRjY3B3LmZpZm8pOwogCXJldHVybiByZXQ7CiB9CiBtb2R1bGVfaW5pdChkY2NwcHJvYmVfaW5pdCk7CiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBkY2NwcHJvYmVfZXhpdCh2b2lkKQogewotCWtmaWZvX2ZyZWUoZGNjcHcuZmlmbyk7CisJa2ZpZm9fZnJlZSgmZGNjcHcuZmlmbyk7CiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgcHJvY25hbWUpOwogCXVucmVnaXN0ZXJfanByb2JlKCZkY2NwX3NlbmRfcHJvYmUpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggM2IzYTk1Ni4uMmNkZGVhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtNzA4LDcgKzcwOCw4IEBACiAKIAl0YWJsZSA9IG5ldC0+aXB2Ni5zeXNjdGwuZnJhZ3NfaGRyLT5jdGxfdGFibGVfYXJnOwogCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQtPmlwdjYuc3lzY3RsLmZyYWdzX2hkcik7Ci0Ja2ZyZWUodGFibGUpOworCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKKwkJa2ZyZWUodGFibGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmlwNl9jdGxfaGVhZGVyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggZGIzYjI3My4uYzJiZDc0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC0yNjMwLDYgKzI2MzAsNyBAQAogCQl0YWJsZVs2XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHk7CiAJCXRhYmxlWzddLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXM7CiAJCXRhYmxlWzhdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbWluX2Fkdm1zczsKKwkJdGFibGVbOV0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19taW5faW50ZXJ2YWw7CiAJfQogCiAJcmV0dXJuIHRhYmxlOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKaW5kZXggODM0NjkzOC4uOWE2YzU4OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYworKysgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAidG9tb3lvLmgiCiAjaW5jbHVkZSAicmVhbHBhdGguaCIKLSNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKIAogLyoKICAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDE0OTdkY2UuLmM1Njk5ODYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtMTcyLDE0ICsxNzIsMTUgQEAKIAlyZXR1cm4gdjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFhY2lfY2hhbl93YWl0X3JlYWR5KHN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4pCitzdGF0aWMgaW5saW5lIHZvaWQKK2FhY2lfY2hhbl93YWl0X3JlYWR5KHN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4sIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKIAl1MzIgdmFsOwogCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWRvIHsKIAkJdmFsID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfU1IpOwotCX0gd2hpbGUgKHZhbCAmIChTUl9UWEJ8U1JfUlhCKSAmJiB0aW1lb3V0LS0pOworCX0gd2hpbGUgKHZhbCAmIG1hc2sgJiYgdGltZW91dC0tKTsKIH0KIAogCkBAIC0yMDgsOCArMjA5LDEwIEBACiAJCQl3cml0ZWwoMCwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXB0ciA9IGFhY2lydW4tPnB0cjsKIAorCQlzcGluX2xvY2soJmFhY2lydW4tPmxvY2spOworCisJCXB0ciA9IGFhY2lydW4tPnB0cjsKIAkJZG8gewogCQkJdW5zaWduZWQgaW50IGxlbiA9IGFhY2lydW4tPmZpZm9zejsKIAkJCXUzMiB2YWw7CkBAIC0yMTcsOSArMjIwLDkgQEAKIAkJCWlmIChhYWNpcnVuLT5ieXRlcyA8PSAwKSB7CiAJCQkJYWFjaXJ1bi0+Ynl0ZXMgKz0gYWFjaXJ1bi0+cGVyaW9kOwogCQkJCWFhY2lydW4tPnB0ciA9IHB0cjsKLQkJCQlzcGluX3VubG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl91bmxvY2soJmFhY2lydW4tPmxvY2spOwogCQkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoYWFjaXJ1bi0+c3Vic3RyZWFtKTsKLQkJCQlzcGluX2xvY2soJmFhY2ktPmxvY2spOworCQkJCXNwaW5fbG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQl9CiAJCQlpZiAoIShhYWNpcnVuLT5jciAmIENSX0VOKSkKIAkJCQlicmVhazsKQEAgLTI0NSw3ICsyNDgsMTAgQEAKIAkJCQkJcHRyID0gYWFjaXJ1bi0+c3RhcnQ7CiAJCQl9CiAJCX0gd2hpbGUoMSk7CisKIAkJYWFjaXJ1bi0+cHRyID0gcHRyOworCisJCXNwaW5fdW5sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAl9CiAKIAlpZiAobWFzayAmIElTUl9VUklOVFIpIHsKQEAgLTI2Myw2ICsyNjksOCBAQAogCQkJcmV0dXJuOwogCQl9CiAKKwkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKKwogCQlwdHIgPSBhYWNpcnVuLT5wdHI7CiAJCWRvIHsKIAkJCXVuc2lnbmVkIGludCBsZW4gPSBhYWNpcnVuLT5maWZvc3o7CkBAIC0yNzEsOSArMjc5LDkgQEAKIAkJCWlmIChhYWNpcnVuLT5ieXRlcyA8PSAwKSB7CiAJCQkJYWFjaXJ1bi0+Ynl0ZXMgKz0gYWFjaXJ1bi0+cGVyaW9kOwogCQkJCWFhY2lydW4tPnB0ciA9IHB0cjsKLQkJCQlzcGluX3VubG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl91bmxvY2soJmFhY2lydW4tPmxvY2spOwogCQkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoYWFjaXJ1bi0+c3Vic3RyZWFtKTsKLQkJCQlzcGluX2xvY2soJmFhY2ktPmxvY2spOworCQkJCXNwaW5fbG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQl9CiAJCQlpZiAoIShhYWNpcnVuLT5jciAmIENSX0VOKSkKIAkJCQlicmVhazsKQEAgLTMwMSw2ICszMDksOCBAQAogCQl9IHdoaWxlICgxKTsKIAogCQlhYWNpcnVuLT5wdHIgPSBwdHI7CisKKwkJc3Bpbl91bmxvY2soJmFhY2lydW4tPmxvY2spOwogCX0KIH0KIApAQCAtMzEwLDcgKzMyMCw2IEBACiAJdTMyIG1hc2s7CiAJaW50IGk7CiAKLQlzcGluX2xvY2soJmFhY2ktPmxvY2spOwogCW1hc2sgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9BTExJTlRTKTsKIAlpZiAobWFzaykgewogCQl1MzIgbSA9IG1hc2s7CkBAIC0zMjAsNyArMzI5LDYgQEAKIAkJCX0KIAkJfQogCX0KLQlzcGluX3VubG9jaygmYWFjaS0+bG9jayk7CiAKIAlyZXR1cm4gbWFzayA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CkBAIC0zMzAsNjMgKzMzOCw2IEBACiAvKgogICogQUxTQSBzdXBwb3J0LgogICovCi0KLXN0cnVjdCBhYWNpX3N0cmVhbSB7Ci0JdW5zaWduZWQgY2hhciBjb2RlY19pZHg7Ci0JdW5zaWduZWQgY2hhciByYXRlX2lkeDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWFjaV9zdHJlYW0gYWFjaV9zdHJlYW1zW10gPSB7Ci0JW0FDU1RSRUFNX0ZST05UXSA9IHsKLQkJLmNvZGVjX2lkeAk9IDAsCi0JCS5yYXRlX2lkeAk9IEFDOTdfUkFURVNfRlJPTlRfREFDLAotCX0sCi0JW0FDU1RSRUFNX1NVUlJPVU5EXSA9IHsKLQkJLmNvZGVjX2lkeAk9IDAsCi0JCS5yYXRlX2lkeAk9IEFDOTdfUkFURVNfU1VSUl9EQUMsCi0JfSwKLQlbQUNTVFJFQU1fTEZFXSA9IHsKLQkJLmNvZGVjX2lkeAk9IDAsCi0JCS5yYXRlX2lkeAk9IEFDOTdfUkFURVNfTEZFX0RBQywKLQl9LAotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWFjaV9yYXRlX21hc2soc3RydWN0IGFhY2kgKmFhY2ksIGludCBzdHJlYW1pZCkKLXsKLQlzdHJ1Y3QgYWFjaV9zdHJlYW0gKnMgPSBhYWNpX3N0cmVhbXMgKyBzdHJlYW1pZDsKLQlyZXR1cm4gYWFjaS0+YWM5N19idXMtPmNvZGVjW3MtPmNvZGVjX2lkeF0tPnJhdGVzW3MtPnJhdGVfaWR4XTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYXRlX2xpc3RbXSA9IHsKLQk1NTEyLCA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCAzMjAwMCwgNDQxMDAsCi0JNDgwMDAsIDY0MDAwLCA4ODIwMCwgOTYwMDAsIDE3NjQwMCwgMTkyMDAwCi19OwotCi0vKgotICogRG91YmxlLXJhdGUgcnVsZTogd2UgY2FuIHN1cHBvcnQgZG91YmxlIHJhdGUgaWZmIGNoYW5uZWxzID09IDIKLSAqICAodW5pbXBsZW1lbnRlZCkKLSAqLwotc3RhdGljIGludAotYWFjaV9ydWxlX3JhdGVfYnlfY2hhbm5lbHMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwLCBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQotewotCXN0cnVjdCBhYWNpICphYWNpID0gcnVsZS0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgcmF0ZV9tYXNrID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMHxTTkRSVl9QQ01fUkFURV81NTEyOwotCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOwotCi0Jc3dpdGNoIChjLT5tYXgpIHsKLQljYXNlIDY6Ci0JCXJhdGVfbWFzayAmPSBhYWNpX3JhdGVfbWFzayhhYWNpLCBBQ1NUUkVBTV9MRkUpOwotCWNhc2UgNDoKLQkJcmF0ZV9tYXNrICY9IGFhY2lfcmF0ZV9tYXNrKGFhY2ksIEFDU1RSRUFNX1NVUlJPVU5EKTsKLQljYXNlIDI6Ci0JCXJhdGVfbWFzayAmPSBhYWNpX3JhdGVfbWFzayhhYWNpLCBBQ1NUUkVBTV9GUk9OVCk7Ci0JfQotCi0JcmV0dXJuIHNuZF9pbnRlcnZhbF9saXN0KGh3X3BhcmFtX2ludGVydmFsKHAsIHJ1bGUtPnZhciksCi0JCQkJIEFSUkFZX1NJWkUocmF0ZV9saXN0KSwgcmF0ZV9saXN0LAotCQkJCSByYXRlX21hc2spOwotfQotCiBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYWFjaV9od19pbmZvID0gewogCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfApAQCAtNDAwLDEwICszNTEsNyBAQAogCSAqLwogCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCi0JLyogc2hvdWxkIHRoaXMgYmUgY29udGludW91cyBvciBrbm90PyAqLwotCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLnJhdGVfbWluCQk9IDQwMDAsCisJLyogcmF0ZXMgYXJlIHNldHVwIGZyb20gdGhlIEFDJzk3IGNvZGVjICovCiAJLmNoYW5uZWxzX21pbgkJPSAyLAogCS5jaGFubmVsc19tYXgJCT0gNiwKIAkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogMTAyNCwKQEAgLTQyMyw2ICszNzEsMTIgQEAKIAlhYWNpcnVuLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gYWFjaXJ1bjsKIAlydW50aW1lLT5odyA9IGFhY2lfaHdfaW5mbzsKKwlydW50aW1lLT5ody5yYXRlcyA9IGFhY2lydW4tPnBjbS0+cmF0ZXM7CisJc25kX3BjbV9saW1pdF9od19yYXRlcyhydW50aW1lKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCisJICAgIGFhY2lydW4tPnBjbS0+clsxXS5zbG90cykKKwkJc25kX2FjOTdfcGNtX2RvdWJsZV9yYXRlX3J1bGVzKHJ1bnRpbWUpOwogCiAJLyoKIAkgKiBGSVhNRTogQUxTQSBzcGVjaWZpZXMgZmlmb19zaXplIGluIGJ5dGVzLiAgSWYgd2UncmUgaW4gbm9ybWFsCkBAIC00MzMsMTcgKzM4Nyw2IEBACiAJICovCiAJcnVudGltZS0+aHcuZmlmb19zaXplID0gYWFjaS0+Zmlmb3NpemUgKiAyOwogCi0JLyoKLQkgKiBBZGQgcnVsZSBkZXNjcmliaW5nIGhhcmR3YXJlIHJhdGUgZGVwZW5kZW5jeQotCSAqIG9uIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCi0JICovCi0JcmV0ID0gc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLQkJCQkgIGFhY2lfcnVsZV9yYXRlX2J5X2NoYW5uZWxzLCBhYWNpLAotCQkJCSAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotCQkJCSAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsIC0xKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQogCXJldCA9IHJlcXVlc3RfaXJxKGFhY2ktPmRldi0+aXJxWzBdLCBhYWNpX2lycSwgSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCwKIAkJCSAgRFJJVkVSX05BTUUsIGFhY2kpOwogCWlmIChyZXQpCkBAIC01MDcsMTggKzQ1MCwyMiBAQAogCiAJZXJyID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKIAkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7CisJaWYgKGVyciA+PSAwKSB7CisJCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwkJaW50IGRibCA9IHJhdGUgPiA0ODAwMDsKIAotCWVyciA9IHNuZF9hYzk3X3BjbV9vcGVuKGFhY2lydW4tPnBjbSwgcGFyYW1zX3JhdGUocGFyYW1zKSwKLQkJCQlwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKLQkJCQlhYWNpcnVuLT5wY20tPnJbMF0uc2xvdHMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQllcnIgPSBzbmRfYWM5N19wY21fb3BlbihhYWNpcnVuLT5wY20sIHJhdGUsCisJCQkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAorCQkJCQlhYWNpcnVuLT5wY20tPnJbZGJsXS5zbG90cyk7CiAKLQlhYWNpcnVuLT5wY21fb3BlbiA9IDE7CisJCWFhY2lydW4tPnBjbV9vcGVuID0gZXJyID09IDA7CisJCWFhY2lydW4tPmNyID0gQ1JfRkVOIHwgQ1JfQ09NUEFDVCB8IENSX1NaMTY7CisJCWFhY2lydW4tPmZpZm9zeiA9IGFhY2ktPmZpZm9zaXplICogNDsKIAotIG91dDoKKwkJaWYgKGFhY2lydW4tPmNyICYgQ1JfQ09NUEFDVCkKKwkJCWFhY2lydW4tPmZpZm9zeiA+Pj0gMTsKKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01MjcsNyArNDc0LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlhYWNpcnVuLT5zdGFydAk9ICh2b2lkICopcnVudGltZS0+ZG1hX2FyZWE7CisJYWFjaXJ1bi0+c3RhcnQJPSBydW50aW1lLT5kbWFfYXJlYTsKIAlhYWNpcnVuLT5lbmQJPSBhYWNpcnVuLT5zdGFydCArIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwogCWFhY2lydW4tPnB0cgk9IGFhY2lydW4tPnN0YXJ0OwogCWFhY2lydW4tPnBlcmlvZAk9CkBAIC02MjcsMTQgKzU3NCw5IEBACiAJICogRW5hYmxlIEZJRk8sIGNvbXBhY3QgbW9kZSwgMTYgYml0cyBwZXIgc2FtcGxlLgogCSAqIEZJWE1FOiBkb3VibGUgcmF0ZSBzbG90cz8KIAkgKi8KLQlpZiAocmV0ID49IDApIHsKLQkJYWFjaXJ1bi0+Y3IgPSBDUl9GRU4gfCBDUl9DT01QQUNUIHwgQ1JfU1oxNjsKKwlpZiAocmV0ID49IDApCiAJCWFhY2lydW4tPmNyIHw9IGNoYW5uZWxzX3RvX3R4bWFza1tjaGFubmVsc107CiAKLQkJYWFjaXJ1bi0+Zmlmb3N6CT0gYWFjaS0+Zmlmb3NpemUgKiA0OwotCQlpZiAoYWFjaXJ1bi0+Y3IgJiBDUl9DT01QQUNUKQotCQkJYWFjaXJ1bi0+Zmlmb3N6ID4+PSAxOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NDYsNyArNTg4LDcgQEAKIAlpZSAmPSB+KElFX1VSSUV8SUVfVFhJRSk7CiAJd3JpdGVsKGllLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CiAJYWFjaXJ1bi0+Y3IgJj0gfkNSX0VOOwotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1RYQik7CiAJd3JpdGVsKGFhY2lydW4tPmNyLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9UWENSKTsKIH0KIApAQCAtNjU0LDcgKzU5Niw3IEBACiB7CiAJdTMyIGllOwogCi0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfVFhCKTsKIAlhYWNpcnVuLT5jciB8PSBDUl9FTjsKIAogCWllID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwpAQCAtNjY1LDEyICs2MDcsMTIgQEAKIAogc3RhdGljIGludCBhYWNpX3BjbV9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQogewotCXN0cnVjdCBhYWNpICphYWNpID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWFjaS0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhYWNpcnVuLT5sb2NrLCBmbGFncyk7CisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJCWFhY2lfcGNtX3BsYXliYWNrX3N0YXJ0KGFhY2lydW4pOwpAQCAtNjk3LDcgKzYzOSw4IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWFjaS0+bG9jaywgZmxhZ3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWFjaXJ1bi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTcyMSwxOCArNjY0LDEwIEBACiAJaW50IHJldDsKIAogCXJldCA9IGFhY2lfcGNtX2h3X3BhcmFtcyhzdWJzdHJlYW0sIGFhY2lydW4sIHBhcmFtcyk7Ci0KLQlpZiAocmV0ID49IDApIHsKLQkJYWFjaXJ1bi0+Y3IgPSBDUl9GRU4gfCBDUl9DT01QQUNUIHwgQ1JfU1oxNjsKLQorCWlmIChyZXQgPj0gMCkKIAkJLyogTGluZSBpbiByZWNvcmQ6IHNsb3QgMyBhbmQgNCAqLwogCQlhYWNpcnVuLT5jciB8PSBDUl9TTDMgfCBDUl9TTDQ7CiAKLQkJYWFjaXJ1bi0+Zmlmb3N6ID0gYWFjaS0+Zmlmb3NpemUgKiA0OwotCi0JCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCi0JCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc0MCw3ICs2NzUsNyBAQAogewogCXUzMiBpZTsKIAotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1JYQik7CiAKIAlpZSA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAlpZSAmPSB+KElFX09SSUUgfCBJRV9SWElFKTsKQEAgLTc1NSw3ICs2OTAsNyBAQAogewogCXUzMiBpZTsKIAotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1JYQik7CiAKICNpZmRlZiBERUJVRwogCS8qIFJYIFRpbWVvdXQgdmFsdWU6IGJpdHMgMjg6MTcgaW4gUlhDUiAqLwpAQCAtNzcyLDEyICs3MDcsMTEgQEAKIAogc3RhdGljIGludCBhYWNpX3BjbV9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTgwNiw3ICs3NDAsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpcnVuLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODg5LDYgKzgyMywxMiBAQAogCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fU1JJR0hUKSB8CiAJCQkJCSAgKDEgPDwgQUM5N19TTE9UX0xGRSksCiAJCQl9LAorCQkJWzFdID0geworCQkJCS5zbG90cwk9ICgxIDw8IEFDOTdfU0xPVF9QQ01fTEVGVCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fUklHSFQpIHwKKwkJCQkJICAoMSA8PCBBQzk3X1NMT1RfUENNX0xFRlRfMCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fUklHSFRfMCksCisJCQl9LAogCQl9LAogCX0sCiAJWzFdID0gewkvKiBQQ00gaW4gKi8KQEAgLTEwMDEsNyArOTQxLDYgQEAKIAogCWFhY2kgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJbXV0ZXhfaW5pdCgmYWFjaS0+YWM5N19zZW0pOwotCXNwaW5fbG9ja19pbml0KCZhYWNpLT5sb2NrKTsKIAlhYWNpLT5jYXJkID0gY2FyZDsKIAlhYWNpLT5kZXYgPSBkZXY7CiAKQEAgLTEwMjgsNyArOTY3LDcgQEAKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmFhY2lfcGxheWJhY2tfb3BzKTsKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmYWFjaV9jYXB0dXJlX29wcyk7CiAJCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCi0JCQkJCQkgICAgICBOVUxMLCAwLCA2NCAqIDEwNCk7CisJCQkJCQkgICAgICBOVUxMLCAwLCA2NCAqIDEwMjQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDg4LDEyICsxMDI3LDE0IEBACiAJLyoKIAkgKiBQbGF5YmFjayB1c2VzIEFBQ0kgY2hhbm5lbCAwCiAJICovCisJc3Bpbl9sb2NrX2luaXQoJmFhY2ktPnBsYXliYWNrLmxvY2spOwogCWFhY2ktPnBsYXliYWNrLmJhc2UgPSBhYWNpLT5iYXNlICsgQUFDSV9DU0NIMTsKIAlhYWNpLT5wbGF5YmFjay5maWZvID0gYWFjaS0+YmFzZSArIEFBQ0lfRFIxOwogCiAJLyoKIAkgKiBDYXB0dXJlIHVzZXMgQUFDSSBjaGFubmVsIDAKIAkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWFjaS0+Y2FwdHVyZS5sb2NrKTsKIAlhYWNpLT5jYXB0dXJlLmJhc2UgPSBhYWNpLT5iYXNlICsgQUFDSV9DU0NIMTsKIAlhYWNpLT5jYXB0dXJlLmZpZm8gPSBhYWNpLT5iYXNlICsgQUFDSV9EUjE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmggYi9zb3VuZC9hcm0vYWFjaS5oCmluZGV4IDkyNGY2OWMuLjZhNGEyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmgKKysrIGIvc291bmQvYXJtL2FhY2kuaApAQCAtMjAyLDYgKzIwMiw3IEBACiBzdHJ1Y3QgYWFjaV9ydW50aW1lIHsKIAl2b2lkCQkJX19pb21lbSAqYmFzZTsKIAl2b2lkCQkJX19pb21lbSAqZmlmbzsKKwlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IGFjOTdfcGNtCQkqcGNtOwogCWludAkJCXBjbV9vcGVuOwpAQCAtMjMyLDcgKzIzMyw2IEBACiAJc3RydWN0IHNuZF9hYzk3CQkqYWM5NzsKIAogCXUzMgkJCW1haW5jcjsKLQlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IGFhY2lfcnVudGltZQlwbGF5YmFjazsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lCWNhcHR1cmU7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggYzE1NjgyYS4uNDc1NDU1YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBTTkRfUENNCiAJdHJpc3RhdGUKIAlzZWxlY3QgU05EX1RJTUVSCisJc2VsZWN0IEdDRAogCiBjb25maWcgU05EX0hXREVQCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggMzBmNDEwOC4uYTI3NTQ1YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC03NTgsNyArNzU4LDcgQEAKIAkJaW50IGRpZmY7CiAJCWlmIChxID09IDApCiAJCQlxID0gMTsKLQkJZGVuID0gZGl2X2Rvd24obnVtLCBxKTsKKwkJZGVuID0gZGl2X3VwKG51bSwgcSk7CiAJCWlmIChkZW4gPCByYXRzW2tdLmRlbl9taW4pCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA+IHJhdHNba10uZGVuX21heCkKQEAgLTc5NCw3ICs3OTQsNyBAQAogCQkJaS0+ZW1wdHkgPSAxOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZGVuID0gZGl2X3VwKG51bSwgcSk7CisJCWRlbiA9IGRpdl9kb3duKG51bSwgcSk7CiAJCWlmIChkZW4gPiByYXRzW2tdLmRlbl9tYXgpCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA8IHJhdHNba10uZGVuX21pbikKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCmluZGV4IGNhODA2OGIuLmIwMWQ5NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKKysrIGIvc291bmQvY29yZS9wY21fdGltZXIuYwpAQCAtMjAsNiArMjAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CkBAIC0yOCwyMiArMjksNiBAQAogICogIFRpbWVyIGZ1bmN0aW9ucwogICovCiAKLS8qIEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnY2QodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCi17Ci0JdW5zaWduZWQgbG9uZyByOwotCWlmIChhIDwgYikgewotCQlyID0gYTsKLQkJYSA9IGI7Ci0JCWIgPSByOwotCX0KLQl3aGlsZSAoKHIgPSBhICUgYikgIT0gMCkgewotCQlhID0gYjsKLQkJYiA9IHI7Ci0JfQotCXJldHVybiBiOwotfQotCiB2b2lkIHNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJdW5zaWduZWQgbG9uZyByYXRlLCBtdWx0LCBmc2l6ZSwgbCwgcG9zdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKaW5kZXggY2I5YWE0Yy4uNGJlNTYyYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCAiTVNORC1NSURJIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCW1wdSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKKwltcHUgPSBremFsbG9jKHNpemVvZigqbXB1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1wdSA9PSBOVUxMKSB7CiAJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBybWlkaSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKaW5kZXggOTY2NzhkNS4uNzUxNzYyZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCkBAIC0zOTMsOCArMzkzLDYgQEAKIAogCXdoaWxlIChzaXplIDwgRU1VODAwMF9NQVhfRFJBTSkgewogCi0JCXNpemUgKz0gNTEyICogMTAyNDsgIC8qIGluY3JlbWVudCA1MTJrYnl0ZXMgKi8KLQogCQkvKiBXcml0ZSBhIHVuaXF1ZSBkYXRhIG9uIHRoZSB0ZXN0IGFkZHJlc3MuCiAJCSAqIGlmIHRoZSBhZGRyZXNzIGlzIG91dCBvZiByYW5nZSwgdGhlIGRhdGEgaXMgd3JpdHRlbiBvbgogCQkgKiAweDIwMDAwMCg9RU1VODAwMF9EUkFNX09GRlNFVCkuICBUaGVuIHRoZSBpZCB3b3JkIGlzCkBAIC00MTQsNyArNDEyLDkgQEAKIAkJLypzbmRfZW11ODAwMF9yZWFkX3dhaXQoZW11KTsqLwogCQlFTVU4MDAwX1NNTERfUkVBRChlbXUpOyAvKiBkaXNjYXJkIHN0YWxlIGRhdGEgICovCiAJCWlmIChFTVU4MDAwX1NNTERfUkVBRChlbXUpICE9IFVOSVFVRV9JRDIpCi0JCQlicmVhazsgLyogd2UgbXVzdCBoYXZlIHdyYXBwZWQgYXJvdW5kICovCisJCQlicmVhazsgLyogbm8gbWVtb3J5IGF0IHRoaXMgYWRkcmVzcyAqLworCisJCXNpemUgKz0gNTEyICogMTAyNDsgIC8qIGluY3JlbWVudCA1MTJrYnl0ZXMgKi8KIAogCQlzbmRfZW11ODAwMF9yZWFkX3dhaXQoZW11KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCA4NjkxZjRjLi5mMWQ5ZDE2IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAJLyogYWxsb2MgdmlydHVhbCAnZG1hJyBhcmVhICovCiAJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKQogCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwogCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDgzZjVlZTIuLmUxOWRkNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgICBpLCBsaW1pdCA9IGppZmZpZXMgKyBIWi8xMDsKIAogCW91dHcoMHgyMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgKGxpbWl0LWppZmZpZXMgPj0gMCk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJaW53KFJFRyhQU1NfQ09OVFJPTCkpOwogCW91dHcoMHgwMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKIAlyZXR1cm4gMTsKQEAgLTM2OSwxMSArMzY5LDExIEBACiAJCW91dHcoMCwgUkVHKFBTU19EQVRBKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQgLSBqaWZmaWVzID49IDApOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiB0aW1lX2FmdGVyX2VxKGxpbWl0LCBqaWZmaWVzKTsgaSsrKQogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQtamlmZmllcyA+PSAwKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJewogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAJCQlpZiAodmFsICYgMHg0MDAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggOWNmZGI3Ny4uOTUwZWU1Y2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMTA4NiwxMSArMTA4Niw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JLyogYXVkaW8gY29kZWMgc2hvdWxkIG92ZXJyaWRlIHRoZSBtaXhlciBuYW1lICovCi0JaWYgKGNvZGVjLT5hZmcgfHwgISpjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpCi0JCXNucHJpbnRmKGNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSwKLQkJCSBzaXplb2YoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSwKLQkJCSAiJXMgJXMiLCBjb2RlYy0+dmVuZG9yX25hbWUsIGNvZGVjLT5jaGlwX25hbWUpOwogCiAJaWYgKGlzX2dlbmVyaWNfY29uZmlnKGNvZGVjKSkgewogCQllcnIgPSBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwpAQCAtMTEwOSw2ICsxMTA0LDExIEBACiAgcGF0Y2hlZDoKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQogCQllcnIgPSBpbml0X3Vuc29sX3F1ZXVlKGNvZGVjLT5idXMpOworCS8qIGF1ZGlvIGNvZGVjIHNob3VsZCBvdmVycmlkZSB0aGUgbWl4ZXIgbmFtZSAqLworCWlmICghZXJyICYmIChjb2RlYy0+YWZnIHx8ICEqY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSkKKwkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAorCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAorCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfY29uZmlndXJlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDliNTZmOTMuLmZmOGFkNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjMyMiw2ICsyMzIyLDcgQEAKICAqIHdoaXRlL2JsYWNrLWxpc3QgZm9yIGVuYWJsZV9tc2kKICAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIG1zaV9ibGFja19saXN0W10gX19kZXZpbml0ZGF0YSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWYyLCAiQVNVUyIsIDApLCAvKiBBdGhsb242NCBYMiArIG52aWRpYSAqLwogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCA0YjIwMGRhLi5mZTA0MjNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKIC8qIGF2YWlsYWJsZSBtb2RlbHMgKi8KIGVudW0gewogCUNTNDIwWF9NQlA1NSwKKwlDUzQyMFhfSU1BQzI3LAogCUNTNDIwWF9BVVRPLAogCUNTNDIwWF9NT0RFTFMKIH07CkBAIC04MjcsNyArODI4LDggQEAKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJCSAgICBocF9wcmVzZW50ID8gMCA6IFBJTl9PVVQpOwogCX0KLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IENTNDIwWF9NQlA1NSkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX01CUDU1IHx8CisJICAgIHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBDUzQyMFhfSU1BQzI3KSB7CiAJCXVuc2lnbmVkIGludCBncGlvID0gaHBfcHJlc2VudCA/IDB4MDIgOiAweDA4OwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLAogCQkJCSAgICBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIGdwaW8pOwpAQCAtMTA2OSwxMiArMTA3MSwxNCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqY3M0MjB4X21vZGVsc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9ICJtYnA1NSIsCisJW0NTNDIwWF9JTUFDMjddID0gImltYWMyNyIsCiAJW0NTNDIwWF9BVVRPXSA9ICJhdXRvIiwKIH07CiAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGNzNDIweF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwZGUsIDB4Y2I3OSwgIk1hY0Jvb2tQcm8gNSw1IiwgQ1M0MjBYX01CUDU1KSwKKwlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHg3MjcwLCAiSU1hYyAyNyBJbmNoIiwgQ1M0MjBYX0lNQUMyNyksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTA5Nyw4ICsxMTAxLDIzIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBjc19waW5jZmcgaW1hYzI3X3BpbmNmZ3NbXSA9IHsKKwl7IDB4MDksIDB4MDEyYjQwNTAgfSwKKwl7IDB4MGEsIDB4OTAxMDAxNDAgfSwKKwl7IDB4MGIsIDB4OTAxMDAxNDIgfSwKKwl7IDB4MGMsIDB4MDE4YjMwMjAgfSwKKwl7IDB4MGQsIDB4OTBhMDAxMTAgfSwKKwl7IDB4MGUsIDB4NDAwMDAwZjAgfSwKKwl7IDB4MGYsIDB4MDFjYmUwMzAgfSwKKwl7IDB4MTAsIDB4MDE0YmUwNjAgfSwKKwl7IDB4MTIsIDB4MDFhYjkwNzAgfSwKKwl7IDB4MTUsIDB4NDAwMDAwZjAgfSwKKwl7fSAvKiB0ZXJtaW5hdG9yICovCit9OworCiBzdGF0aWMgc3RydWN0IGNzX3BpbmNmZyAqY3NfcGluY2Znc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9IG1icDU1X3BpbmNmZ3MsCisJW0NTNDIwWF9JTUFDMjddID0gaW1hYzI3X3BpbmNmZ3MsCiB9OwogCiBzdGF0aWMgdm9pZCBmaXhfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbW9kZWwpCkBAIC0xMTI4LDYgKzExNDcsNyBAQAogCQlmaXhfcGluY2ZnKGNvZGVjLCBzcGVjLT5ib2FyZF9jb25maWcpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIENTNDIwWF9JTUFDMjc6CiAJY2FzZSBDUzQyMFhfTUJQNTU6CiAJCS8qIEdQSU8xID0gaGVhZHBob25lcyAqLwogCQkvKiBHUElPMyA9IHNwZWFrZXJzICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYTA5YzAzYy4uYzU3OGMyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogI2RlZmluZSBDWFRfUElOX0RJUl9JTiAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBDWFRfUElOX0RJUl9PVVQgICAgICAgICAgICAgMHgwMQpAQCAtMTExLDYgKzExMiw3IEBACiAJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOwogCXVuc2lnbmVkIGNoYXIgZXh0X21pY19iaWFzOworCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTQ3Niw2ICs0NzgsNyBAQAogCQlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+amFja3MpOwogCX0KICNlbmRpZgorCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIAlrZnJlZShjb2RlYy0+c3BlYyk7CiB9CiAKQEAgLTIxMDksOSArMjExMiwxMiBAQAogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCB2YWw7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPworCQlBQ19BTVBfR0VUX0lOUFVUIDogQUNfQU1QX0dFVF9PVVRQVVQ7CiAKLQl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTcsIDAsCi0JCUFDX1ZFUkJfR0VUX0FNUF9HQUlOX01VVEUsIEFDX0FNUF9HRVRfT1VUUFVUKTsKKwl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJQUNfVkVSQl9HRVRfQU1QX0dBSU5fTVVURSwgaW5vdXQpOwogCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbCAmIEFDX0FNUF9HQUlOOwogCXJldHVybiAwOwpAQCAtMjEyMyw2ICsyMTI5LDkgQEAKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3Q7CiAJdW5zaWduZWQgaW50IGlkeDsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOworCWludCBpbm91dCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4MTAwKSA/CisJCUFDX0FNUF9TRVRfSU5QVVQgOiBBQ19BTVBfU0VUX09VVFBVVDsKIAogCWlmICghaW11eC0+bnVtX2l0ZW1zKQogCQlyZXR1cm4gMDsKQEAgLTIxMzAsOSArMjEzOSw5IEBACiAJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCiAJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKIAkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IGlub3V0IHwKIAkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOwogCiAJcmV0dXJuIDE7CkBAIC0yMjAxLDEwICsyMjEwLDExIEBACiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJBbmFsb2cgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5uYW1lID0gIkV4dCBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKIAkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAogCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTcsCiAJfSwKIAogCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCkBAIC0yMjEyLDYgKzIyMjIsMTkgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfdm9zdHJvX21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkludCBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKKwkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MjMgfCAweDEwMCwKKwl9LAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic1tdID0gewogCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEIgKi8KIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBDICovCkBAIC0yMzk3LDExICsyNDIwLDE2IEBACiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNjZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOworCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCisJCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKKwkJZWxzZQorCQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTAwLDcgKzI1MjgsMTAgQEAKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic192b3N0cm87CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXJfb2xwYzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X3Zvc3Ryb19taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZGVsbF92b3N0cm8gPSAxOworCQlzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMyk7CiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGFlZWQ0Y2MuLmM3NDY1MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0xMzEsOCArMTMxLDggQEAKIGVudW0gewogCUFMQzI2OV9CQVNJQywKIAlBTEMyNjlfUVVBTlRBX0ZMMSwKLQlBTEMyNjlfQVNVU19FRUVQQ19QNzAzLAotCUFMQzI2OV9BU1VTX0VFRVBDX1A5MDEsCisJQUxDMjY5X0FTVVNfQU1JQywKKwlBTEMyNjlfQVNVU19ETUlDLAogCUFMQzI2OV9GVUpJVFNVLAogCUFMQzI2OV9MSUZFQk9PSywKIAlBTEMyNjlfQVVUTywKQEAgLTE4OCw2ICsxODgsOCBAQAogCUFMQzY2M19BU1VTX01PREU0LAogCUFMQzY2M19BU1VTX01PREU1LAogCUFMQzY2M19BU1VTX01PREU2LAorCUFMQzY2M19BU1VTX01PREU3LAorCUFMQzY2M19BU1VTX01PREU4LAogCUFMQzI3Ml9ERUxMLAogCUFMQzI3Ml9ERUxMX1pNMSwKIAlBTEMyNzJfU0FNU1VOR19OQzEwLApAQCAtMzM1LDYgKzMzNyw5IEBACiAJLyogaG9va3MgKi8KIAl2b2lkICgqaW5pdF9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAJdm9pZCAoKnVuc29sX2V2ZW50KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcyk7CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKKyNlbmRpZgogCiAJLyogZm9yIHBpbiBzZW5zaW5nICovCiAJdW5zaWduZWQgaW50IHNlbnNlX3VwZGF0ZWQ6IDE7CkBAIC0zODYsNiArMzkxLDcgQEAKIAl2b2lkICgqaW5pdF9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICopOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlzdHJ1Y3QgaGRhX2FtcF9saXN0ICpsb29wYmFja3M7CisJdm9pZCAoKnBvd2VyX2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpOwogI2VuZGlmCiB9OwogCkBAIC04OTgsNiArOTA0LDcgQEAKIAlzcGVjLT51bnNvbF9ldmVudCA9IHByZXNldC0+dW5zb2xfZXZlbnQ7CiAJc3BlYy0+aW5pdF9ob29rID0gcHJlc2V0LT5pbml0X2hvb2s7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCXNwZWMtPnBvd2VyX2hvb2sgPSBwcmVzZXQtPnBvd2VyX2hvb2s7CiAJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IHByZXNldC0+bG9vcGJhY2tzOwogI2VuZGlmCiAKQEAgLTE2NjMsOSArMTY3MCw2IEBACiAvKiAgc29tZSBiaXQgaGVyZSBkaXNhYmxlcyB0aGUgb3RoZXIgREFDcy4gSW5pdD0weDQ5MDAgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwOH0sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgwMDAwfSwKLS8qIEVuYWJsZSBhbXBsaWZpZXJzICovCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDJ9LAogLyogRE1JQyBmaXgKICAqIFRoaXMgbGFwdG9wIGhhcyBhIHN0ZXJlbyBkaWdpdGFsIG1pY3JvcGhvbmUuIFRoZSBtaWNzIGFyZSBvbmx5IDFjbSBhcGFydAogICogd2hpY2ggbWFrZXMgdGhlIHN0ZXJlbyB1c2VsZXNzLiBIb3dldmVyLCBlaXRoZXIgdGhlIG1pYyBvciB0aGUgQUxDODg5CkBAIC0xNzc4LDYgKzE3ODIsMjUgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsCisJCUhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisKIHN0YXRpYyB2b2lkIGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTE4MDgsNiArMTgzMSwxNiBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxYjsKIH0KIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKK3N0YXRpYyB2b2lkIGFsYzg4OV9wb3dlcl9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgcG93ZXIgPyAyIDogMCk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNSwgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgcG93ZXIgPyAyIDogMCk7Cit9CisjZW5kaWYKKwogLyoKICAqIEFMQzg4MCAzLXN0YWNrIG1vZGVsCiAgKgpAQCAtMzYwMSwxMiArMzYzNCwyOSBAQAogCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKK3N0YXRpYyBpbnQgYWxjX3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQorCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisjZW5kaWYKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQorCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAxKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zNjIzLDYgKzM2NzMsNyBAQAogCS5yZXN1bWUgPSBhbGNfcmVzdW1lLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCS5zdXNwZW5kID0gYWxjX3N1c3BlbmQsCiAJLmNoZWNrX3Bvd2VyX3N0YXR1cyA9IGFsY19jaGVja19wb3dlcl9zdGF0dXMsCiAjZW5kaWYKIH07CkBAIC04OTE5LDcgKzg5NzAsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA0MGQsICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDU3OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyOGZiLCAiVGFyZ2EgVDgiLCBBTEM4ODJfVEFSR0EpLCAvKiBNU0ktMTA0OSBUOCAgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyZmIzLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDJmYjMsICJNU0kiLCBBTEM4ODJfQVVUTyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NjY2OCwgIk1TSSIsIEFMQzg4Ml82U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzNzI5LCAiTVNJIFM0MjAiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzNzgzLCAiTkVDIFM5NzAiLCBBTEM4ODNfVEFSR0FfRElHKSwKQEAgLTkyODIsNiArOTMzMyw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzX2FsdCwKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzX2FsdCksCisJCS5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKQEAgLTkzNzgsMTAgKzk0MzAsMTEgQEAKIAkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzg5MzBHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODg4X2Jhc2VfbWl4ZXIsCisJCS5taXhlcnMgPSB7IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlciwKIAkJCQlhbGM4ODNfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMsCi0JCQkJYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3ZlcmJzIH0sCisJCQkJYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3ZlcmJzLAorCQkJCWFsYzg4OV9lYXBkX3ZlcmJzfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyksCkBAIC05Mzk4LDYgKzk0NTEsOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJLnBvd2VyX2hvb2sgPSBhbGM4ODlfcG93ZXJfZWFwZCwKKyNlbmRpZgogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV83NzMwR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLApAQCAtOTQyOCw2ICs5NDg0LDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHNfYWx0LAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHNfYWx0KSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzX3NpeHN0YWNrX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCkBAIC05NDg5LDYgKzk1NDYsNyBAQAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkc19hbHQsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkc19hbHQpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UsCkBAIC05NjY4LDYgKzk3MjYsNyBAQAogCQkJYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzLAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg5QV9tYjMxXzZjaF9tb2RlcywKQEAgLTEwNjc4LDYgKzEwNzM3LDEzIEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2xlbm92b18zMDAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBGcm9udCBNaWMgcGluOiBpbnB1dCB2cmVmIGF0IDUwJSAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewpAQCAtMTE3MjAsNyArMTE3ODYsOCBAQAogCVtBTEMyNjJfTEVOT1ZPXzMwMDBdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfbGVub3ZvXzMwMDBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfRUFQRF92ZXJicywKLQkJCQlhbGMyNjJfbGVub3ZvXzMwMDBfdW5zb2xfdmVyYnMgfSwKKwkJCQlhbGMyNjJfbGVub3ZvXzMwMDBfdW5zb2xfdmVyYnMsCisJCQkJYWxjMjYyX2xlbm92b18zMDAwX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLApAQCAtMTI4NTcsNyArMTI5MjQsNyBAQAogCWludCBib2FyZF9jb25maWc7CiAJaW50IGksIGhhc19iZWVwLCBlcnI7CiAKLQlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTMyMzIsMTAgKzEzMjk5LDEyIEBACiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCiBzdGF0aWMgdm9pZCBhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCXVuc2lnbmVkIGNoYXIgYml0czsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE1KTsKKwlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIAliaXRzID0gcHJlc2VudCA/IEFNUF9JTl9NVVRFKDApIDogMDsKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKIAkJCQlBTVBfSU5fTVVURSgwKSwgYml0cyk7CkBAIC0xMzQ2MCw4ICsxMzUyOSw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjY5X21vZGVsc1tBTEMyNjlfTU9ERUxfTEFTVF0gPSB7CiAJW0FMQzI2OV9CQVNJQ10JCQk9ICJiYXNpYyIsCiAJW0FMQzI2OV9RVUFOVEFfRkwxXQkJPSAicXVhbnRhIiwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDcwM10JPSAiZWVlcGMtcDcwMyIsCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A5MDFdCT0gImVlZXBjLXA5MDEiLAorCVtBTEMyNjlfQVNVU19BTUlDXQkJPSAiYXN1cy1hbWljIiwKKwlbQUxDMjY5X0FTVVNfRE1JQ10JCT0gImFzdXMtZG1pYyIsCiAJW0FMQzI2OV9GVUpJVFNVXQkJPSAiZnVqaXRzdSIsCiAJW0FMQzI2OV9MSUZFQk9PS10JCT0gImxpZmVib29rIiwKIAlbQUxDMjY5X0FVVE9dCQkJPSAiYXV0byIsCkBAIC0xMzQ3MCwxOCArMTM1MzksNDEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X1FVQU5UQV9GTDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMzAsICJBU1VTIEVlZXBjIFA3MDMgUDkwMEEiLAotCQkgICAgICBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg4MywgIkFTVVMgRjgxU2UiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzczLCAiQVNVUyBVMjBBIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTEzMywgIkFTVVMgVUoyMGZ0IiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEpUIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmIzLCAiQVNVUyBOODJKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzYTMsICJBU1VTIFVMMzBWdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzNzMsICJBU1VTIEc3M0pYIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM4MywgIkFTVVMgVUozMEpjIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNkMywgIkFTVVMgTjYxSkEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDEzLCAiQVNVUyBVTDUwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ0MywgIkFTVVMgVUwzMCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NTMsICJBU1VTIE02MEp2IiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ4MywgIkFTVVMgVUw4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZjMsICJBU1VTIEY4M1ZmIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRlMywgIkFTVVMgVUwyMCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1MTMsICJBU1VTIFVYMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWEzLCAiQVNVUyBONjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YjMsICJBU1VTIE42MERwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVjMywgIkFTVVMgTjcwRGUiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWUzLCAiQVNVUyBGODNUIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFTVVMgTTYwSiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NTMsICJBU1VTIFU1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2OTMsICJBU1VTIEY1ME4iLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmEzLCAiQVNVUyBGNVEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0FTVVNfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTcyMywgIkFTVVMgUDgwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc0MywgIkFTVVMgVTgwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ODMsICJBU1VTIEY4MVNlIiwgQUxDMjY5X0FTVVNfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkFTVVMgRWVlcGMgUDkwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0VFRVBDX1A5MDEpLAorCQkgICAgICBBTEMyNjlfQVNVU19ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRUVFUENfUDkwMSksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2ZTMsICJBU1VTIFVYNTAiLCBBTEMyNjlfQVNVU19FRUVQQ19QOTAxKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0NzUsICJMaWZlYm9vayBJQ0g5TS1iYXNlZCIsIEFMQzI2OV9MSUZFQk9PSyksCiAJe30KQEAgLTEzNTExLDcgKzEzNjAzLDcgQEAKIAkJLnNldHVwID0gYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDcwM10gPSB7CisJW0FMQzI2OV9BU1VTX0FNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLApAQCAtMTM1MjUsNyArMTM2MTcsNyBAQAogCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKIAl9LAotCVtBTEMyNjlfQVNVU19FRUVQQ19QOTAxXSA9IHsKKwlbQUxDMjY5X0FTVVNfRE1JQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCkBAIC0xNjE2MCw2ICsxNjI1Miw1MiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCA9IHsKKwkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKKwkudmFsdWVzID0geworCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTUsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWIsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQkwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoID0geworCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAorCS52YWx1ZXMgPSB7CisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNywgMywgMCwgSERBX09VVFBVVCksCisJCTAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlN19taXhlcltdID0geworCUhEQV9CSU5EX1NXKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoKSwKKwlIREFfQklORF9WT0woIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCisJSERBX0JJTkRfU1coIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2gpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUxIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlOF9taXhlcltdID0geworCUhEQV9CSU5EX1NXKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoKSwKKwlIREFfQklORF9WT0woIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCisJSERBX0JJTkRfU1coIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2gpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUxIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9jaG1vZGVfbWl4ZXJbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTY0NDcsNiArMTY1ODUsNDUgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZTdfaW5pdF92ZXJic1tdID0geworCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBIZWFkcGhvbmUgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDkpfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9NSUNfRVZFTlR9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX21vZGU4X2luaXRfdmVyYnNbXSA9IHsKKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBIZWFkcGhvbmUgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDkpfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTY2MjYsNiArMTY4MDMsNTQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFsYzY2M190d29faHBfbTdfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDEsIHByZXNlbnQyOworCisJcHJlc2VudDEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCXByZXNlbnQyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIxLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKworCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjNjYzX3R3b19ocF9tOF9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50MSwgcHJlc2VudDI7CisKKwlwcmVzZW50MSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMSwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkKKwkJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0U7CisJcHJlc2VudDIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTUsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCisJaWYgKHByZXNlbnQxIHx8IHByZXNlbnQyKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTQsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCiB7CkBAIC0xNjY0NSw3ICsxNjg3MCw3IEBACiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwotCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gOTsKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKQEAgLTE2NjU3LDcgKzE2ODgyLDE3IEBACiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGUxICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgYWxjNjYzX21vZGUxX3Vuc29sX2V2ZW50CWFsYzY2M19tNTF2YV91bnNvbF9ldmVudAotI2RlZmluZSBhbGM2NjNfbW9kZTFfc2V0dXAJCWFsYzY2M19tNTF2YV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCiAjZGVmaW5lIGFsYzY2M19tb2RlMV9pbml0aG9vawkJYWxjNjYzX201MXZhX2luaXRob29rCiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGUyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2Njc0LDcgKzE2OTA5LDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYyX21vZGUyX3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjJfbW9kZTJfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9tb2RlMl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2Njk1LDcgKzE2OTMwLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGUzX3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTNfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlM19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzE2LDcgKzE2OTUxLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU0X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTRfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzM3LDcgKzE2OTcyLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU1X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTVfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzU4LDcgKzE2OTkzLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU2X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTZfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzY2LDYgKzE3MDAxLDUwIEBACiAJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKKy8qICoqKioqKioqKioqKioqKioqIE1vZGU3ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlN191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgYWxjNjYzX21vZGU3X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTdfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjNjYzX3R3b19ocF9tN19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKK30KKworLyogKioqKioqKioqKioqKioqKiogTW9kZTggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgYWxjNjYzX21vZGU4X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CisJCWFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKKwkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBhbGM2NjNfbW9kZThfc2V0dXAJYWxjNjYzX201MXZhX3NldHVwCisKK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGM2NjNfdHdvX2hwX204X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhbGM2NjNfZzcxdl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKQEAgLTE2OTAwLDYgKzE3MTc5LDggQEAKIAlbQUxDNjYzX0FTVVNfTU9ERTRdID0gImFzdXMtbW9kZTQiLAogCVtBTEM2NjNfQVNVU19NT0RFNV0gPSAiYXN1cy1tb2RlNSIsCiAJW0FMQzY2M19BU1VTX01PREU2XSA9ICJhc3VzLW1vZGU2IiwKKwlbQUxDNjYzX0FTVVNfTU9ERTddID0gImFzdXMtbW9kZTciLAorCVtBTEM2NjNfQVNVU19NT0RFOF0gPSAiYXN1cy1tb2RlOCIsCiAJW0FMQzI3Ml9ERUxMXQkJPSAiZGVsbCIsCiAJW0FMQzI3Ml9ERUxMX1pNMV0JPSAiZGVsbC16bTEiLAogCVtBTEMyNzJfU0FNU1VOR19OQzEwXQk9ICJzYW1zdW5nLW5jMTAiLApAQCAtMTY5MTYsMTIgKzE3MTk3LDIyIEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMwMywgIkFTVVMgRzYwSiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzMzLCAiQVNVUyBHNjBKeCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2UzLCAiQVNVUyBONzFKQSIsIEFMQzY2M19BU1VTX01PREU3KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDYzLCAiQVNVUyBONzEiLCBBTEM2NjNfQVNVU19NT0RFNyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRkMywgIkFTVVMgRzcyIiwgQUxDNjYzX0FTVVNfTU9ERTgpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1NjMsICJBU1VTIE45MCIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWQzLCAiQVNVUyBONTBTRiBGNTBTRiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmYzLCAiQVNVUyBLNDBDIEs1MEMiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTczMywgIkFTVVMgTjgxRGUiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc5MywgIkFTVVMgRjUwR1giLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdiMywgIkFTVVMgRjcwU0wiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdjMywgIkFTVVMgVVgyMCIsIEFMQzY2M19BU1VTX001MVZBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxN2YzLCAiQVNVUyBYNThMRSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE3MjA1LDYgKzE3NDk2LDM2IEBACiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlNl9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlNl9pbml0aG9vaywKIAl9LAorCVtBTEM2NjNfQVNVU19NT0RFN10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzY2M19tb2RlN19taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2M19tb2RlN19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKKwkJLmhwX25pZCA9IDB4MDMsCisJCS5kYWNfbmlkcyA9IGFsYzY2Ml9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKKwkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU3X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTdfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTdfaW5pdGhvb2ssCisJfSwKKwlbQUxDNjYzX0FTVVNfTU9ERThdID0geworCQkubWl4ZXJzID0geyBhbGM2NjNfbW9kZThfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbW9kZThfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCisJCS5ocF9uaWQgPSAweDAzLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlOF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX21vZGU4X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU4X2luaXRob29rLAorCX0sCiAJW0FMQzI3Ml9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYzX201MXZhX21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNzJfYXV0b19jYXB0dXJlX21peGVyLApAQCAtMTc2ODgsNyArMTgwMDksOSBAQAogCXsgLmlkID0gMHgxMGVjMDI2NywgLm5hbWUgPSAiQUxDMjY3IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCiAJeyAuaWQgPSAweDEwZWMwMjY4LCAubmFtZSA9ICJBTEMyNjgiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjggfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjksIC5uYW1lID0gIkFMQzI2OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAorCXsgLmlkID0gMHgxMGVjMDI3MCwgLm5hbWUgPSAiQUxDMjcwIiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCiAJeyAuaWQgPSAweDEwZWMwMjcyLCAubmFtZSA9ICJBTEMyNzIiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKKwl7IC5pZCA9IDB4MTBlYzAyNzUsIC5uYW1lID0gIkFMQzI3NSIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAogCXsgLmlkID0gMHgxMGVjMDg2MSwgLnJldiA9IDB4MTAwMzQwLCAubmFtZSA9ICJBTEM2NjAiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjODYxIH0sCiAJeyAuaWQgPSAweDEwZWMwNjYwLCAubmFtZSA9ICJBTEM2NjAtVkQiLCAucGF0Y2ggPSBwYXRjaF9hbGM4NjF2ZCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDNkNTlmODMuLmVlZGE3YmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTIxMDQsNiArMjEwNCw3IEBACiAgICAgMTAyODAyMDQKICAgICAxMDI4MDIxRgogICAgIDEwMjgwMjI4IChEZWxsIFZvc3RybyAxNTAwKQorICAgIDEwMjgwMjI5IChEZWxsIFZvc3RybyAxNzAwKQogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF85MjA1X200Ml9waW5fY29uZmlnc1sxMl0gPSB7CiAJMHgwMzIxMTAxRiwgMHgwM0ExMTAyMCwgMHg0MDAwMDNGQSwgMHg5MDE3MDMxMCwKQEAgLTIxODksNiArMjE5MCw4IEBACiAJCSAgICAgICJEZWxsIEluc3Bpcm9uIiwgU1RBQ185MjA1X0RFTExfTTQ0KSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjI4LAogCQkgICAgICAiRGVsbCBWb3N0cm8gMTUwMCIsIFNUQUNfOTIwNV9ERUxMX000MiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIyOSwKKwkJICAgICAgIkRlbGwgVm9zdHJvIDE3MDAiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAogCS8qIEdhdGV3YXkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwNTYwLCAiR2F0ZXdheSBUNjgzNGMiLCBTVEFDXzkyMDVfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCkBAIC0zNzc5LDE1ICszNzgyLDE2IEBACiAJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCBuaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCS8qIElEVC9TVEFDIGNvZGVjcyBoYXZlIGxpbmVhciBiZWVwIHRvbmUgcGFyYW1ldGVyICovCi0JCWNvZGVjLT5iZWVwLT5saW5lYXJfdG9uZSA9IDE7Ci0JCS8qIGlmIG5vIGJlZXAgc3dpdGNoIGlzIGF2YWlsYWJsZSwgbWFrZSBpdHMgb3duIG9uZSAqLwotCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7Ci0JCWlmIChjb2RlYy0+YmVlcCAmJgotCQkgICAgISgoY2FwcyAmIEFDX0FNUENBUF9NVVRFKSA+PiBBQ19BTVBDQVBfTVVURV9TSElGVCkpIHsKLQkJCWVyciA9IHN0YWM5Mnh4X2JlZXBfc3dpdGNoX2N0bChjb2RlYyk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQlpZiAoY29kZWMtPmJlZXApIHsKKwkJCS8qIElEVC9TVEFDIGNvZGVjcyBoYXZlIGxpbmVhciBiZWVwIHRvbmUgcGFyYW1ldGVyICovCisJCQljb2RlYy0+YmVlcC0+bGluZWFyX3RvbmUgPSAxOworCQkJLyogaWYgbm8gYmVlcCBzd2l0Y2ggaXMgYXZhaWxhYmxlLCBtYWtlIGl0cyBvd24gb25lICovCisJCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCQlpZiAoIShjYXBzICYgQUNfQU1QQ0FQX01VVEUpKSB7CisJCQkJZXJyID0gc3RhYzkyeHhfYmVlcF9zd2l0Y2hfY3RsKGNvZGVjKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KIAkJfQogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwppbmRleCBkMDU3ZTY0Li41Y2ZhNjA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwpAQCAtNTEsNyArNTEsNyBAQAogCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgZW5vdWdoIGxhcmdlICovCiAJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKIAl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jXzMyKHNpemUpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMl91c2VyKHNpemUpOwogCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKaW5kZXggYjY5ODYxZC4uM2VmMTZiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWs0NjQyX21vZGluaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYWs0NjQyX2kyY19kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKaW5kZXggYmJjNzJjMi4uODFiOGM5ZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCXZyYSA9IHN0YWM5NzY2X2FjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwogCiAJdnJhIHw9IDB4MTsgLyogZW5hYmxlIHZhcmlhYmxlIHJhdGUgYXVkaW8gKi8KKwl2cmEgJj0gfjB4NDsgLyogZGlzYWJsZSBTUERJRiBvdXRwdXQgKi8KIAogCXN0YWM5NzY2X2FjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCB2cmEpOwogCkBAIC0yMjEsMjIgKzIyMiw2IEBACiAJcmV0dXJuIHN0YWM5NzY2X2FjOTdfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWM5N19kaWdpdGFsX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQl1bnNpZ25lZCBzaG9ydCB2cmE7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJdnJhID0gc3RhYzk3NjZfYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JCXZyYSAmPSAhMHgwNDsKLQkJc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzdGFjOTc2Nl9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CkBAIC0zMTUsNyArMzAwLDYgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc3RhYzk3NjZfZGFpX29wc19kaWdpdGFsID0gewogCS5wcmVwYXJlID0gYWM5N19kaWdpdGFsX3ByZXBhcmUsCi0JLnRyaWdnZXIgPSBhYzk3X2RpZ2l0YWxfdHJpZ2dlciwKIH07CiAKIHN0cnVjdCBzbmRfc29jX2RhaSBzdGFjOTc2Nl9kYWlbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCmluZGV4IDgxYzU3YjUuLmE4MDg2NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwpAQCAtNDcsNyArNDcsNyBAQAogfTsKIAogI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JJQVNFTiAgMHgwOAotI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JVRklPRU4gMHgxMAorI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JVRklPRU4gMHgwNAogCiBzdHJ1Y3Qgd204OTc0X3ByaXYgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKaW5kZXggMGFjMTIxNS4uZTIzN2JmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC00NjMsNyArNDYzLDggQEAKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAotCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOworCWlmIChyZWcgPCAweDdjKQorCQlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKIAlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQljYWNoZVtyZWddID0gdmFsOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jIGIvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCmluZGV4IDAyNjdkMmQuLjA3ZDJhMjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYworKysgYi9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKQEAgLTE4MCw3ICsxODAsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAogCS8qIGRpc2FibGUgdGhlIFBMTCAqLwotCXJldHVybiBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLCAwLCAwKTsKKwlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCisJCQkJICAgICAgIDAsIDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDljNDljMTEuLjQyODEzYjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTg3Niw3ICs4NzYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVzIHx8ICFpcnEpIHsKKwlpZiAoIXJlcyB8fCAoaW50KWlycSA8PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggRlNJIHBsYXRmb3JtIHJlc291cmNlcy5cbiIpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IGIwNzRhNTkuLjQ5NjNkZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC03NTIsNyArNzUyLDcgQEAKIAkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGxhcmdlIGVub3VnaCAqLwogCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CiAJfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfdXNlcihzaXplKTsKIAlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggNzgxNGRiYi4uNDM5MGQyMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC00ODcsMTAgKzQ4NywxMSBAQAogCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmR3YXJmL2R3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi9saWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQoraWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2lmbmRlZiBfTUlQU19TWkxPTkcnOyBlY2hvICdcI2RlZmluZSBfTUlQU19TWkxPTkcgMCc7IGVjaG8gJ1wjZW5kaWYnOyBlY2hvICdcI2luY2x1ZGUgPGR3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSS91c3IvaW5jbHVkZS9saWJkd2FyZiAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQogCW1zZyA6PSAkKHdhcm5pbmcgTm8gbGliZHdhcmYuaCBmb3VuZCBvciBvbGQgbGliZHdhcmYuaCBmb3VuZCwgZGlzYWJsZXMgZHdhcmYgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgbGliZHdhcmYtZGV2L2xpYmR3YXJmLWRldmVsID49IDIwMDgxMjMxKTsKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJEV0FSRgogZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9saWJkd2FyZgogCUVYVExJQlMgKz0gLWxlbGYgLWxkd2FyZgogCUxJQl9PQkpTICs9IHV0aWwvcHJvYmUtZmluZGVyLm8KIGVuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IDdlNzQxZjUuLmMxZTY3NzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAidXRpbC9zdHJsaXN0LmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnZnMuaCIKICNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCiAjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCkBAIC0yMDUsNiArMjA2LDkgQEAKIAlpZiAoKCFzZXNzaW9uLm5yX3Byb2JlICYmICFzZXNzaW9uLmRlbGxpc3QgJiYgIXNlc3Npb24ubGlzdF9ldmVudHMpKQogCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwogCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gZmluZCBkZWJ1Z2ZzIHBhdGguIik7CisKIAlpZiAoc2Vzc2lvbi5saXN0X2V2ZW50cykgewogCQlpZiAoc2Vzc2lvbi5ucl9wcm9iZSAhPSAwIHx8IHNlc3Npb24uZGVsbGlzdCkgewogCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IGU1MGE2YjEuLjVjMmFiNTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAJcGVyZl9zZXNzaW9uX19jb2xsYXBzZV9yZXNvcnQoc2Vzc2lvbik7CiAJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb24sIHNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCk7Ci0JZnByaW50ZihzdGRvdXQsICIjIFNhbXBsZXM6ICVsZFxuI1xuIiwgc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlmcHJpbnRmKHN0ZG91dCwgIiMgU2FtcGxlczogJUxkXG4jXG4iLCBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWwpOwogCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzZXNzaW9uLCBOVUxMLCBmYWxzZSwgc3Rkb3V0KTsKIAlpZiAoc29ydF9vcmRlciA9PSBkZWZhdWx0X3NvcnRfb3JkZXIgJiYKIAkgICAgcGFyZW50X3BhdHRlcm4gPT0gZGVmYXVsdF9wYXJlbnRfcGF0dGVybikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggODAyNzMwOS4uNjkwYTk2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTk1LDggKzk1LDggQEAKIH0gZXZlbnRfdDsKIAogc3RydWN0IGV2ZW50c19zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbDsKLQl1bnNpZ25lZCBsb25nIGxvc3Q7CisJdTY0IHRvdGFsOworCXU2NCBsb3N0OwogfTsKIAogdm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCAyY2E2MjE1Li4yOTQ2NWQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtNjIsNiArNjIsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLworc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghaXNhbHBoYSgqbmFtZSkgJiYgKm5hbWUgIT0gJ18nKQorCQlyZXR1cm4gZmFsc2U7CisJd2hpbGUgKCorK25hbWUgIT0gJ1wwJykgeworCQlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICFpc2RpZ2l0KCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCiAvKiBQYXJzZSBwcm9iZXBvaW50IGRlZmluaXRpb24uICovCiBzdGF0aWMgdm9pZCBwYXJzZV9wZXJmX3Byb2JlX3Byb2JlcG9pbnQoY2hhciAqYXJnLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewpAQCAtODIsNiArOTQsOSBAQAogCQlwdHIgPSBzdHJjaHIoYXJnLCAnOicpOwogCQlpZiAocHRyKQkvKiBHcm91cCBuYW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAqLwogCQkJc2VtYW50aWNfZXJyb3IoIkdyb3VwIG5hbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJCWlmICghY2hlY2tfZXZlbnRfbmFtZShhcmcpKQorCQkJc2VtYW50aWNfZXJyb3IoIiVzIGlzIGJhZCBmb3IgZXZlbnQgbmFtZSAtaXQgbXVzdCAiCisJCQkJICAgICAgICJmb2xsb3cgQyBzeW1ib2wtbmFtaW5nIHJ1bGUuIiwgYXJnKTsKIAkJcHAtPmV2ZW50ID0gc3RyZHVwKGFyZyk7CiAJCWFyZyA9IHRtcDsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmggYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKaW5kZXggNWU0MDUwYy4uYTQwODZhYWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9QUk9CRV9GSU5ERVJfSAogI2RlZmluZSBfUFJPQkVfRklOREVSX0gKIAotI2RlZmluZSBNQVhfUEFUSF9MRU4gMjU2Ci0jZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIgMTAyNAotI2RlZmluZSBNQVhfUFJPQkVTIDEyOAorI2RlZmluZSBNQVhfUEFUSF9MRU4JCSAyNTYKKyNkZWZpbmUgTUFYX1BST0JFX0JVRkZFUgkxMDI0CisjZGVmaW5lIE1BWF9QUk9CRVMJCSAxMjgKIAogc3RhdGljIGlubGluZSBpbnQgaXNfY192YXJuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0xMiw0OCArMTIsNTMgQEAKIH0KIAogc3RydWN0IHByb2JlX3BvaW50IHsKLQljaGFyCSpldmVudDsJCS8qIEV2ZW50IG5hbWUgKi8KLQljaGFyCSpncm91cDsJCS8qIEV2ZW50IGdyb3VwICovCisJY2hhcgkJCSpldmVudDsJCQkvKiBFdmVudCBuYW1lICovCisJY2hhcgkJCSpncm91cDsJCQkvKiBFdmVudCBncm91cCAqLwogCiAJLyogSW5wdXRzICovCi0JY2hhcgkqZmlsZTsJCS8qIEZpbGUgbmFtZSAqLwotCWludAlsaW5lOwkJLyogTGluZSBudW1iZXIgKi8KKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJaW50CQkJbGluZTsJCQkvKiBMaW5lIG51bWJlciAqLwogCi0JY2hhcgkqZnVuY3Rpb247CS8qIEZ1bmN0aW9uIG5hbWUgKi8KLQlpbnQJb2Zmc2V0OwkJLyogT2Zmc2V0IGJ5dGVzICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwlpbnQJCQlvZmZzZXQ7CQkJLyogT2Zmc2V0IGJ5dGVzICovCiAKLQlpbnQJbnJfYXJnczsJLyogTnVtYmVyIG9mIGFyZ3VtZW50cyAqLwotCWNoYXIJKiphcmdzOwkJLyogQXJndW1lbnRzICovCisJaW50CQkJbnJfYXJnczsJCS8qIE51bWJlciBvZiBhcmd1bWVudHMgKi8KKwljaGFyCQkJKiphcmdzOwkJCS8qIEFyZ3VtZW50cyAqLwogCi0JaW50CXJldHByb2JlOwkvKiBSZXR1cm4gcHJvYmUgKi8KKwlpbnQJCQlyZXRwcm9iZTsJCS8qIFJldHVybiBwcm9iZSAqLwogCiAJLyogT3V0cHV0ICovCi0JaW50CWZvdW5kOwkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLwotCWNoYXIJKnByb2Jlc1tNQVhfUFJPQkVTXTsJLyogT3V0cHV0IGJ1ZmZlcnMgKHdpbGwgYmUgYWxsb2NhdGVkKSovCisJaW50CQkJZm91bmQ7CQkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLworCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CiAKLSNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPgotI2luY2x1ZGUgPGxpYmR3YXJmL2xpYmR3YXJmLmg+CisvKiBXb3JrYXJvdW5kIGZvciB1bmRlZmluZWQgX01JUFNfU1pMT05HIGJ1ZyBpbiBsaWJkd2FyZi5oOiAqLworI2lmbmRlZiBfTUlQU19TWkxPTkcKKyMgZGVmaW5lIF9NSVBTX1NaTE9ORwkJMAorI2VuZGlmCisKKyNpbmNsdWRlIDxkd2FyZi5oPgorI2luY2x1ZGUgPGxpYmR3YXJmLmg+CiAKIHN0cnVjdCBwcm9iZV9maW5kZXIgewotCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CS8qIFRhcmdldCBwcm9iZSBwb2ludCAqLworCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CQkJLyogVGFyZ2V0IHByb2JlIHBvaW50ICovCiAKIAkvKiBGb3IgZnVuY3Rpb24gc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcglhZGRyOwkJLyogQWRkcmVzcyAqLwotCUR3YXJmX1Vuc2lnbmVkCWZubzsJCS8qIEZpbGUgbnVtYmVyICovCi0JRHdhcmZfVW5zaWduZWQJbG5vOwkJLyogTGluZSBudW1iZXIgKi8KLQlEd2FyZl9PZmYJaW5sX29mZnM7CS8qIElubGluZSBvZmZzZXQgKi8KLQlEd2FyZl9EaWUJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLworCUR3YXJmX0FkZHIJCWFkZHI7CQkJLyogQWRkcmVzcyAqLworCUR3YXJmX1Vuc2lnbmVkCQlmbm87CQkJLyogRmlsZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAkJbG5vOwkJCS8qIExpbmUgbnVtYmVyICovCisJRHdhcmZfT2ZmCQlpbmxfb2ZmczsJCS8qIElubGluZSBvZmZzZXQgKi8KKwlEd2FyZl9EaWUJCWN1X2RpZTsJCQkvKiBDdXJyZW50IENVICovCiAKIAkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcgljdV9iYXNlOwkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLwotCUR3YXJmX0xvY2Rlc2MJZmJsb2M7CQkvKiBMb2NhdGlvbiBvZiBDdXJyZW50IEZyYW1lIEJhc2UgKi8KLQljb25zdCBjaGFyCSp2YXI7CQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KLQljaGFyCQkqYnVmOwkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCi0JaW50CQlsZW47CQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLworCUR3YXJmX0FkZHIJCWN1X2Jhc2U7CQkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLworCUR3YXJmX0xvY2Rlc2MJCWZibG9jOwkJCS8qIExvY2F0aW9uIG9mIEN1cnJlbnQgRnJhbWUgQmFzZSAqLworCWNvbnN0IGNoYXIJCSp2YXI7CQkJLyogQ3VycmVudCB2YXJpYWJsZSBuYW1lICovCisJY2hhcgkJCSpidWY7CQkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCisJaW50CQkJbGVuOwkJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCiB9OwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGUxZjJiZjguLmI1YWY4ODEgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICAqLwogc3RhdGljIGludCBjcmVhdGVfdmNwdV9mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGFub25faW5vZGVfZ2V0ZmQoImt2bS12Y3B1IiwgJmt2bV92Y3B1X2ZvcHMsIHZjcHUsIDApOworCXJldHVybiBhbm9uX2lub2RlX2dldGZkKCJrdm0tdmNwdSIsICZrdm1fdmNwdV9mb3BzLCB2Y3B1LCBPX1JEV1IpOwogfQogCiAvKgpAQCAtMTYzOCw3ICsxNjM4LDcgQEAKIAlrdm0gPSBrdm1fY3JlYXRlX3ZtKCk7CiAJaWYgKElTX0VSUihrdm0pKQogCQlyZXR1cm4gUFRSX0VSUihrdm0pOwotCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZtIiwgJmt2bV92bV9mb3BzLCBrdm0sIDApOworCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZtIiwgJmt2bV92bV9mb3BzLCBrdm0sIE9fUkRXUik7CiAJaWYgKGZkIDwgMCkKIAkJa3ZtX3B1dF9rdm0oa3ZtKTsKIAo=